{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "hide_input": false
   },
   "outputs": [],
   "source": [
    "from preamble import *\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Algorithm Chains and Pipelines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sklearn.datasets import load_breast_cancer\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# load and split the data\n",
    "cancer = load_breast_cancer()\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    cancer.data, cancer.target, random_state=0)\n",
    "\n",
    "# compute minimum and maximum on the training data\n",
    "scaler = MinMaxScaler().fit(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test score: 0.97\n"
     ]
    }
   ],
   "source": [
    "# rescale the training data\n",
    "X_train_scaled = scaler.transform(X_train)\n",
    "\n",
    "svm = SVC()\n",
    "# learn an SVM on the scaled training data\n",
    "svm.fit(X_train_scaled, y_train)\n",
    "# scale the test data and score the scaled data\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "print(\"Test score: {:.2f}\".format(svm.score(X_test_scaled, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parameter Selection with Preprocessing "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best cross-validation accuracy: 0.98\n",
      "Best parameters:  {'C': 1, 'gamma': 1}\n",
      "Test set accuracy: 0.97\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "# for illustration purposes only, don't use this code!\n",
    "param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100],\n",
    "              'gamma': [0.001, 0.01, 0.1, 1, 10, 100]}\n",
    "grid = GridSearchCV(SVC(), param_grid=param_grid, cv=5)\n",
    "grid.fit(X_train_scaled, y_train)\n",
    "print(\"Best cross-validation accuracy: {:.2f}\".format(grid.best_score_))\n",
    "print(\"Best parameters: \", grid.best_params_)\n",
    "print(\"Test set accuracy: {:.2f}\".format(grid.score(X_test_scaled, y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "hide_input": false
   },
   "outputs": [
    {
     "data": {
      "application/pdf": "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Y0FuZ2xlIDAKL01heFdpZHRoIDEzNDIgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjEyIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjE1IDAgb2JqCjw8IC9DIDE2IDAgUiAvUyAxNyAwIFIgL1QgMTggMCBSIC9WIDE5IDAgUiAvYSAyMCAwIFIgL2MgMjEgMCBSIC9kIDIyIDAgUgovZSAyMyAwIFIgL2YgMjQgMCBSIC9nIDI1IDAgUiAvaSAyNiAwIFIgL2wgMjcgMCBSIC9uIDI4IDAgUiAvbyAyOSAwIFIKL3AgMzAgMCBSIC9yIDMxIDAgUiAvcyAzMiAwIFIgL3NwYWNlIDMzIDAgUiAvdCAzNCAwIFIgL3YgMzUgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjM2IDAgb2JqCjw8IC9CQm94IFsgMCAwIDcyIDcyIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNTIKL01hdHJpeCBbIDEgMCAwIDEgMCA1ODQuMTMyNTkxMjgxNyBdIC9QYWludFR5cGUgMSAvUGF0dGVyblR5cGUgMQovUmVzb3VyY2VzIDw8IC9Qcm9jc2V0cyBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSA+PgovVGlsaW5nVHlwZSAxIC9UeXBlIC9QYXR0ZXJuIC9YU3RlcCA3MiAvWVN0ZXAgNzIgPj4Kc3RyZWFtCnicJY8xDsMwDAN3vYIfEOA4iuKsXbrnD22XeMnS75dUIcKAKetENzTW+bQFqvtT971L9wtv+l8zXxPUNB5LG7joNFDTotPpcnqAojNwpIxlgJq2BY5WBt92GtkwQkZC0EzsYmrztP/uyxKuJjspGge9hjmZohHthSd7E43LvQJwe4jHfF4ZFTDEZHyvf+gTq7D2sB8lszEcCmVuZHN0cmVhbQplbmRvYmoKMzcgMCBvYmoKPDwgL0JCb3ggWyAwIDAgNzIgNzIgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE2MgovTWF0cml4IFsgMSAwIDAgMSAwIDU4NC4xMzI1OTEyODE3IF0gL1BhaW50VHlwZSAxIC9QYXR0ZXJuVHlwZSAxCi9SZXNvdXJjZXMgPDwgL1Byb2NzZXRzIFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdID4+Ci9UaWxpbmdUeXBlIDEgL1R5cGUgL1BhdHRlcm4gL1hTdGVwIDcyIC9ZU3RlcCA3MiA+PgpzdHJlYW0KeJx1jzEOwzAMA3e9gh9wITuK4qxdsvcPbZd4ydLvl3TnwoQBU9aJcjjP4zC/rV739K3Hgv+P6z0btiZdT7ys4mNWlgQ1jFf1jpOOgxoWjU6T0wIUnY49ZdQOatga2H0a/NtopKOHjISgmdjE1ORhv9mnJYqKrKRobCyzmZ0pGtFl4sleRePwMgNweojHfGVmVMAQk/HL3ENLLMLa3b5HkDfECmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8PCAvSDEgMzYgMCBSIC9IMiAzNyAwIFIgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0NvdW50IDEgL0tpZHMgWyAxMCAwIFIgXSAvVHlwZSAvUGFnZXMgPj4KZW5kb2JqCjM4IDAgb2JqCjw8IC9DcmVhdGlvbkRhdGUgKEQ6MjAyMDA1MjAxMjA4NDQtMDQnMDAnKQovQ3JlYXRvciAobWF0cGxvdGxpYiAzLjEuMywgaHR0cDovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKG1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgMy4xLjMpID4+CmVuZG9iagp4cmVmCjAgMzkKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDk2MzEgMDAwMDAgbiAKMDAwMDAwODU1NSAwMDAwMCBuIAowMDAwMDA4NTg3IDAwMDAwIG4gCjAwMDAwMDk1NDYgMDAwMDAgbiAKMDAwMDAwOTU4OSAwMDAwMCBuIAowMDAwMDA5NjEwIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5OCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDE1OTIgMDAwMDAgbiAKMDAwMDAwNzI3NiAwMDAwMCBuIAowMDAwMDA3MDc2IDAwMDAwIG4gCjAwMDAwMDY2ODEgMDAwMDAgbiAKMDAwMDAwODMyOSAwMDAwMCBuIAowMDAwMDAxNjEzIDAwMDAwIG4gCjAwMDAwMDE5MTggMDAwMDAgbiAKMDAwMDAwMjMyOSAwMDAwMCBuIAowMDAwMDAyNDY1IDAwMDAwIG4gCjAwMDAwMDI2MDcgMDAwMDAgbiAKMDAwMDAwMjk4NCAwMDAwMCBuIAowMDAwMDAzMjg3IDAwMDAwIG4gCjAwMDAwMDM1ODcgMDAwMDAgbiAKMDAwMDAwMzkwNSAwMDAwMCBuIAowMDAwMDA0MTExIDAwMDAwIG4gCjAwMDAwMDQ1MjIgMDAwMDAgbiAKMDAwMDAwNDY2MiAwMDAwMCBuIAowMDAwMDA0Nzc5IDAwMDAwIG4gCjAwMDAwMDUwMTMgMDAwMDAgbiAKMDAwMDAwNTMwMCAwMDAwMCBuIAowMDAwMDA1NjA5IDAwMDAwIG4gCjAwMDAwMDU4MzkgMDAwMDAgbiAKMDAwMDAwNjI0NCAwMDAwMCBuIAowMDAwMDA2MzMzIDAwMDAwIG4gCjAwMDAwMDY1MzcgMDAwMDAgbiAKMDAwMDAwODY4NiAwMDAwMCBuIAowMDAwMDA5MTExIDAwMDAwIG4gCjAwMDAwMDk2OTEgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyAzOCAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgMzkgPj4Kc3RhcnR4cmVmCjk4NDUKJSVFT0YK\n",
      "image/png": "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fPgB066++modffTRWrRokdavX19pmUmTJqlnz56Vpt9///2SgrNrFc/05OXlqV+/fnr00UfLpz377LPaunWrvvGNb+jkk08+ID958uRaP2Riy5Yt+vOf/6yuXbvqrrvuUrNmBx6OtWnThgdWAI0ExRSQQr7+9a9rw4YNWrhwoX76059q+PDh2r9/v+bMmaMRI0Zo3LhxcvcDlpkwYYKaNWumgoIClZaWlk+fMWOGJOk73/nOAfmy5XksOXBoauzbmcGDB1ea1rx5cw0aNEiS9Oabb1aa379//7h9LVu2TOnp6Zo1a5YmT55cqf33v//Vxx9/rE8//VSStGLFiirH0K5dO/Xr169W7+H111/X/v37dcYZZ+iwww6r1TIAUhP3TAEpJj09Xeeee67OPfdcScGjjJ9++mmNHz9eDz30kEaNGqULL7ywPJ+Tk6NzzjlHCxcu1Pz583XBBReoqKhIL7/8snJycsr7KdOtWzdJ0gcffNBwbwpASmnM25nOnTvHnV52ZmzHjh1Vzqvo008/1b59+zRlypRq17lr1y517NixvO+axlCT7du3Swoemw6gcePMFJDimjdvrq9//eu67rrrJEmLFi2qlCn7q3DZjeB/+MMf5O769re/XenykbK/3r7xxhtxDzoAHHoa03Zm8+bNcadv2rRJkuJeHlfVGbJ27dqpffv2Nd4TkZOTc0DfNY2hJmWXFG7cuLFWeQCpi2IKaCTatGkjSZUuv5GkESNGqEuXLpo/f77ef/99zZw5s/w+h4p69uypIUOGqKSkRHfeeWeN692zZ8/BDz6OsqdpxV4yBCC5GsN25q9//WulaaWlpXr11VclBfeF1dZpp52mbdu26V//+let8mUfLBxvDDt27NDKlStr1U///v3VrFkzvfLKKyouLq4xz/YSSF0UU0CKePzxx/XSSy9p//79leZt2rSp/K/BZ5xxRqX5aWlpysvLU2lpqS677DJ98MEHGjp0aJWXkPz6179W27Zt9atf/Up333239u3bVymzYcMGXXLJJVq2bNlBvrP4yh7RvGHDhnrpH0BlTWE7s2jRIs2bN++AaQ888IDWrFmjM888s/wsUm2UnYm78sor9eGHH1aaX1xcrOXLl5e/HjlypNq3b6/HHntMb7zxxgHZyZMn1/os3OGHH65LLrlEH330kW688cZKP49du3Yd0BfbSyB1cc8UkCL+/ve/67777lOXLl00aNCg8idPrVu3Ts8//7x2796tkSNHasyYMXGXv/LKK3X77bdr6dKlkirfEB6rd+/eWrhwoS666CLdeOONuu+++3T22WerW7duKi4u1qpVq/S3v/1NZqYf//jHiX+zks4++2zNmjVLo0eP1tChQ9WyZUvl5OToW9/6Vr2sD0DT2M5ccMEFGjVqlEaNGqUvfvGLWrVqlebPn68OHTrowQcfrMN3I9gOTZ06VTfffLOOOeYYDR06VD179tSuXbu0fv16/fWvf9WgQYO0YMECSVLr1q31+9//XmPHjtVXv/rVAz5n6u2339YZZ5yhV155pVbrfuCBB/T222/rt7/9rZYsWaLzzjtPGRkZWrdunRYuXKi5c+cqNze3fJx33nmnrrzySo0ZM0atW7dWVlaWrr766jq9XwD1INnPZqfRDqWmaj7/ZcOGDf7AAw/4hRde6Mcee6y3adPG09PTvUuXLn7++ef7ww8/XOmzSCoaMmSIS/Lu3bv7vn37qs26B5+Zcs8993hubm75Z8W0bdvWTzzxRL/pppvifi5LVVTHz5nat2+f33zzzd6zZ09PS0urcvmK6/AU+DnSaKncmup2puxznwoKCvy5557z0047zVu1auXt2rXz0aNH+7///e9Ky9T285mWLl3qF198sXft2tXT09M9Ozvb+/bt69ddd12lz5Nyd3/xxRd94MCB3rJlS8/KyvIRI0Z4YWFh3PVV9TlT7u67du3yn//8596nTx9v2bKlt27d2r/0pS/5xIkTffPmzQdk7777bu/du7dnZGS4JM/Jyany/bCtpNEarpl75euiAdQPM3P+z0VnZnJ3nukOVKOpbmdmzpypK664QgUFBcrLy0v2cFIa20qg4XDPFAAAAABEQDEFAAAAABFQTAEAAABABNwzBTSgpnovQ0PhPgCgZmxnwLYSaDicmQIAAACACCimAAAAACACiikAAAAAiIBiCgAAAAAioJgCAAAAgAjSkj0A4FCSmZm52cw6J3scjVVmZubmZI8BSHVsZ8C2Emg4PBodgCTJzB6R9Km7T0z2WAAgCjPrLekhST9x95eTPR4ATR+X+QGQmR0m6TJJE5I9FgA4CGdLOkXSqGQPBMChgWIKAAAAACKgmAIAAACACCimAAAAACACiikAAAAAiIBiCgAAAAAioJgCAAAAgAgo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AAAioJgCAAAAgAi4zA8AAAAAIuDMFAAAAABEQDEFAAAAABFQTAEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBAAAAQAQUUwAAAAAQAcUUAAAAAERAMQUAAAAAEVBMAQAAAEAEFFMAAAAAEAHFFAAAAABEQDEFAAAAABFQTAEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBAAAAQAQUUwAAAAAQAcUUAAAAAERAMQUAAAAAEVBMAQAAAEAEFFMAAAAAEAHFFAAAAABEQDEFAAAAABFQTAEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBAAAAQAQUUwAAAAAQAcUUAAAAAERAMQUAAAAAEVBMAQAAAEAEFFMAAAAAEAHFFAAAAABEQDEFAAAAABFQTAEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBAAAAQAQUUwAAAAAQAcUUAAAAAERAMQUAAAAAEVBMAQAAAEAEFFMAAAAAEAHFFAAAAABEQDEFAAAAABFQTAEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBAAAAQAQUUwAAAAAQAcUUAAAAAERAMQUAAAAAEVBMAQAAAEAEFFMAAAAAEAHFFAAAAABEQDEFAAAAABFQTAEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBAAAAQARpyR4AgKavZcuWm0pKSjonexyNVWZm5ubdu3d3SfY4ACBR2C+gqezbzN2TPQYATZyZOdua6MxM7m7JHgcAJAr7BTSVfRuX+QEAAABABBRTAAAAABABxRQAAAAAREAxBQAAAAARUEwBwEHYuXOnfvjDH6pHjx5KS0uTmWnlypVasmSJzEyTJ09O9hABACiXl5cnM1NRUVH5tKKiIpmZ8vLykjauxopiCkDSlZaWavr06Ro8eLA6dOig9PR0derUSccff7wmTJiguXPnSpL279+vI488Umamd955p9o+d+/eraysLGVkZGjLli0HzCsuLta0adN01llnqVOnTsrIyFBWVpb69++vW265RWvXrq312CdNmqRf//rX6tOnj26++Wbl5+erS5eqn/Sam5srs0b/8CIAqFeNeb9wqIpXpB0K+JwpAElVWlqq4cOHa8GCBcrKytKwYcPUvXt3bd26VWvWrNFjjz2md999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Y8dq793JyMgos+3q2lCd0CWFW7durVG+qaKYApDQ2rVrJ0kRl3NI0vDhw5WWlqbFixfryy+/1OzZs0uvmy8vKytLgwcPVmFhoaZNm1btfg8fPlz3xlcgNDpT+CUoAICaawj9wjvvvBMxr7i4WH/5y18kefeF1dS5556rr7/+Wn/7299qlA99sXBFbdi3b58++eSTGm2nT58+atasmd59910dPHiw2nxT7d8opgDE1Ysvvqg333xTJSUlEct27NhR+u7igAEDIpYnJSVp/PjxKi4u1tixY7VlyxYNHTq00ksSfvvb3+qoo47Sgw8+qEceeURFRUURmc2bN+vKK6/UypUr6/jMKhYa8nfz5s0x2T4ANHSNoV9YtmyZXn311TLzZs6cqS+++EKDBg0q/RSpJkKfxN1www3atm1bxPKDBw/q/fffL308YsQIdezYUS+88IJWr15daLnDTwAAHaRJREFUJpuTk1PjT+E6d+6sK6+8Utu3b9fkyZMjfh8HDhwos62m2r9xzxSAuPrggw/02GOPKS0tTf379y8dyWjjxo167bXXdOjQIY0YMUKXXXZZhevfcMMNmjp1qlasWCEp8gbjcKeccoqWLl2qSy+9VJMnT9Zjjz2mCy64QOnp6Tp48KDWrFmjv/71rzIz3XXXXdF/spIuuOACzZ07V6NHj9bQoUPVqlUrZWRk6JprronJ/gCgoWkM/cKwYcM0atQojRo1SieeeKLWrFmjxYsX6+ijj9asWbNq8dPw+o0pU6bonnvu0UknnaShQ4cqKytLBw4c0KZNm/TOO++of//+WrJkiSSpbdu2euKJJzRmzBh973vfK/M9U2vXrtWAAQP07rvv1mjfM2fO1Nq1a/X4449r+fLlGjJkiFq0aKGNGzdq6dKlWrRokbKzs0vbOW3aNN1www267LLL1LZtW3Xo0EETJ06s1fNtcOI9NjsTE1Pjn1TF94ls3rzZzZw5040cOdKdfPLJrl27di45OdmlpaW5H/zgB+65556L+G6L8kLfYH/ccce5oqKiKrPOed/B8eijj7rs7OzS7x456qij3FlnneXuvvvuCr/nozKq5fdMFRUVuXvuucdlZWW5pKSkStcvvw+XAL9HJiYmpmhNjbVfCH3vU25urnvllVfcueee61q3bu3at2/vRo8e7f7xj39ErFPT72dasWKFu/zyy13Xrl1d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YmJiaioTl/kBiKmkpCQlJydHzE9NTS39/0cffaT33ntPPXr00F133VVhNiUlpfRxRkaGmjdvHpGbMGGCjjrqKC1durTadr322mv64osv9NOf/lQDBw4ssyw9PV133nmnduzYobfffjti3RtvvFE9e/asdh8AAKBx4zI/ADEzduxY3XHHHTr99NM1ZswYDRw4UP369VPnzp3L5N5//31J0pAhQ9SsWfXv8Rw5ckR/+MMf9Kc//Unr1q3Tvn37VFJSUrp869at1W5j5cqVkqRNmzYpJycnYvnnn38uSVq/fn3EpX59+vSpdvsAAKDxo5gCEDO33367UlNTNWvWLM2YMUPTp0+XmWngwIGaNm2aevfuLUnau3evJNV4aPAxY8Zo/vz5OuGEEzRixAilpaWpZcuWkqTp06fr8OHD1W5j9+7dkqS5c+dWmTtw4EDEvKq+HwoAADQdFFMAYuraa6/Vtddeq7179+q9997T/Pnz9cc//lFDhgzR+vXrdcwxx6hDhw6SavaJ0urVqzV//nwNHjxYixcvLnMJYUlJiR566KEatat9+/aSpIULF2r48OG1ek5mVqs8AABonLhnCkC96NChg4YOHaonn3xS48eP1549e7RixQpJ0rnnnitJWrp0aZnL9Sryz3/+U5I0fPjwiHuxPvzwQx06dKhG7QntM9SGRBO6J6y4uDjOLQEAAJWhmAIQM0uWLFFRUVHE/J07d0qSWrduLUnq1auX+vbtq08++URTp06NyO/evVuFhYWSVPqdTsuXL4/Y5k9+8pMat23EiBHq1q2bfve732nx4sUVZlauXKl//etfNd5mNHXs2FFmps2bN8dl/wAAoHpc5gcgZq688kqlpKSof//+yszMlHNOK1as0KpVq9SrVy8NHjy4NDtnzhxlZ2fr3nvv1bx585SdnS3nnD7//HO98cYb+vvf/67MzEydffbZ6tevn15++WX17dtX/fv3V0FBgV5//XV95zvfUXp6eo3alpycrJdffllDhgzRxRdfrL59+6pHjx5q3bq1vvzyS61atUobNmzQ9u3bS4u++tS2bVudc845WrFihcaOHauTTz5ZzZs31/Dhw3XmmWfWe3sAAEAkiikAMTNlyhQtXbpUeXl5Wrx4sVJSUpSRkaGpU6fqlltuKXOZXlZWlvLy8vTQQw9pwYIFmjlzplJSUpSZmak77rhDxxxzjCTv8rdFixbpvvvu0+LFizVjxgwde+yxuv7663XffffptNNOq3H7zjzzTK1Zs0aPPvqoXn31VeXm5qpZs2bq2rWrevbsqQceeKDMEO717bnnntOkSZO0ZMkSvfjii3LO6bjjjqOYAgAgQZhzLt5tANCAmZnjOJIYzEzOOUbHAACgnnDPFAAAAAAEQDEFAAAAAAFQTAEAAABAABRTAAAAABAAxRQAAAAABEAxBQAAAAABUEwBAAAAQAAUUwAAAAAQAMUUAAAAAASQFO8GAGjYUlJSCsysS7zbAe93Ee82AADQlJhzLt5tAIC4MbMMSZ2cc3nxbgsAAGhYKKYANGlm9rGk0yR1ds7tj3d7AABAw8E9UwCaus6SWkg6Kt4NAQAADQvFFAAAAAAEQDEFAAAAAAFQTAEAAABAABRTAAAAABAAxRQAAAAABBCzL+01s+ax2jYARFHoWNWc4xaABqDE8b02QMKIyfdMmdnTkiZEfcMAAABN2xpJZzvnjsS7IQBiV0xtkXSsJOdPAJCowi93LolbKwCgeqHj1X8457bEtSUAJMXwMj/f8fyxAwAA1F3Ym9UAEgQDUAAAAABAABRTAAAAABBArC7ze0VSL0k7YrR9AACApobzKyDBxGQACgAAAABo7LjMDwAAAAACoJgCAAAAgAAopgAAAAAgAIopAAAAAAiAYgoAAAAAAqCYAgAAAIAAKKYAAAAAIACKKQAAAAAIgGIKAAAAAAKgmAIAAACAACimAAAAACAAiikAAAAACIBiCgAAAAACoJgCAAAAgAAopgAAAAAgAIopAAAAAAggqTbhVq1a7SgsLOwSq8YAAIDoSElJKTh06FBa+Lzk5OQdRUVF9OONVFJSUsGRI0dKf+f8voGaKf+3UxvmnKt52MxVlV++fLkuv/xyzZ07V9nZ2dVujzx58uTJkycfm7yZyTln4Tkzczk5Odq4caPmzp2ryy+/XFlZWdVun3zDyOfk5JT5nYd+3wCqVv5vpzaidplfQ+hYyJMnT548+aaeT5QTf/KxyQOoX1EpphKtoyBPnjx58uTJVyyRTvzJRzcPoP7VuZhKtI6CPHny5MmTJ1+5RDnxJx/9PID6V6diKtE6CvLkyZMnT5581RLlxJ989PMA6l/gYirROgry5MmTJ0+efN0laqFAvvo8gPoXqJhKtI6CPHny5MmTJ193iVwokK97HkD01bqYSrSOgjx58uTJkydfd4l24k8+unkAsVHrYiqROgry5MmTJ0+efMX52ki0E3/y0c0DiJ1aF1OJ1FGQJ0+ePHny5CvO11SinfiTj24eQGzVuphKpI6CPHny5MmTJ19xviYS7cSffHTzAGKv1sVUdRK5YyFPnjx58uTJexLtxJ98dPMA6kdUi6lE6yjIkydPnjx58pES7cSffHTzAOpP1IqpROsoyJMnT548efKREu3En3x08wDqV1SKqUTrKMiTJ0+ePHnyFUukE3/y0c0DqH91LqYSraMgT548efLkyVcuUU78yUc/D6D+1amYSrSOgjx58uTJkydftUQ58Scf/TyA+he4mEq0joI8efLkyZMnX3eJWiiQrz4PoP4FKqYSraMgT548efLkydddIhcK5OueBxB9tS6mEq2jIE+ePHny5MnXXaKd+JOPbh5AbNS6mEqkjoI8efLkyZMnX3G+NhLtxJ98dPMAYqfWxVQidRTkyZMnT548+YrzNZVoJ/7ko5sHEFu1LqYSqaMgT548efLkyVecr4lEO/EnH908gNirdTFVnUTuWMiTJ0+ePHnynkQ78Scf3TyA+hHVYirROgry5MmTJ0+efKREO/EnH908gPoTtWIq0ToK8uTJkydPnnykRDvxJx/dPID6FZViKtE6CvLkyZMnT558xRLpxJ98dPMA6l+di6lE6yjIkydPnjx58pVLlBN/8tHPA6h/dSqmEq2jIE+ePHny5MlXLVFO/MlHPw+g/gUuphKtoyBPnjx58uTJ112iFgrkq88DqH+BiqlE6yjIkydPnjx58nWXyIUC+brnAURfrYupROsoyJMnT548efJ1l2gn/uSjmwcQG+acq3G4VatWBYWFhcfEsD0AACAKWrRosefw4cOdwuclJyfvKCoq6hKvNiG2kpKSCo4cOZIWeszvG6iZ8n87tVGrYgpA/JjZcklrnXMTa7FOvqSZzrmHY9Uufz/NJP1e0mWSjpY0yDm3vJp1MiVtlHS2c251JZneklZJynLO5UevxQDqU/njV02OZ2a2VtL/OudyornvWDGzNEnPSuonqbVzzmqwznh5x+i2VWQmS5ronMuMUlMBRFFSvBsANFYx6MBHSzpSy3XOlnQwSvuvylBJ10nKlrRB0p562CeAhivI8axKVRQmUd9XJSZLSpfUQ9I39bA/xEgsCnAz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\n",
      "text/plain": [
       "<Figure size 1080x720 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mglearn.plots.plot_improper_processing()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Building Pipelines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "pipe = Pipeline([(\"scaler\", MinMaxScaler()), (\"svm\", SVC())])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(steps=[('scaler', MinMaxScaler()), ('svm', SVC())])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pipe.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test score: 0.97\n"
     ]
    }
   ],
   "source": [
    "print(\"Test score: {:.2f}\".format(pipe.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Using Pipelines in Grid-searches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "param_grid = {'svm__C': [0.001, 0.01, 0.1, 1, 10, 100],\n",
    "              'svm__gamma': [0.001, 0.01, 0.1, 1, 10, 100]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best cross-validation accuracy: 0.98\n",
      "Test set score: 0.97\n",
      "Best parameters: {'svm__C': 1, 'svm__gamma': 1}\n"
     ]
    }
   ],
   "source": [
    "grid = GridSearchCV(pipe, param_grid=param_grid, cv=5)\n",
    "grid.fit(X_train, y_train)\n",
    "print(\"Best cross-validation accuracy: {:.2f}\".format(grid.best_score_))\n",
    "print(\"Test set score: {:.2f}\".format(grid.score(X_test, y_test)))\n",
    "print(\"Best parameters: {}\".format(grid.best_params_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "hide_input": false
   },
   "outputs": [
    {
     "data": {
      "application/pdf": "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ZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTUgMCBvYmoKPDwgL0MgMTYgMCBSIC9TIDE3IDAgUiAvVCAxOCAwIFIgL1YgMTkgMCBSIC9hIDIwIDAgUiAvYyAyMSAwIFIgL2QgMjIgMCBSCi9lIDIzIDAgUiAvZiAyNCAwIFIgL2cgMjUgMCBSIC9pIDI2IDAgUiAvbCAyNyAwIFIgL24gMjggMCBSIC9vIDI5IDAgUgovcCAzMCAwIFIgL3IgMzEgMCBSIC9zIDMyIDAgUiAvc3BhY2UgMzMgMCBSIC90IDM0IDAgUiAvdiAzNSAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PiA+PgplbmRvYmoKMzYgMCBvYmoKPDwgL0JCb3ggWyAwIDAgNzIgNzIgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE1MgovTWF0cml4IFsgMSAwIDAgMSAwIDQ3NS41MzIwNDM5NTA5IF0gL1BhaW50VHlwZSAxIC9QYXR0ZXJuVHlwZSAxCi9SZXNvdXJjZXMgPDwgL1Byb2NzZXRzIFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdID4+Ci9UaWxpbmdUeXBlIDEgL1R5cGUgL1BhdHRlcm4gL1hTdGVwIDcyIC9ZU3RlcCA3MiA+PgpzdHJlYW0KeJwljzEOwzAMA3e9gh8Q4DiK4qxduucPbZd4ydLvl1QhwoAp60Q3NNb5tAWq+1P3vUv3C2/6XzNfE9Q0HksbuOg0UNOi0+lyeoCiM3CkjGWAmrYFjlYG33Ya2TBCRkLQTOxiavO0/+7LEq4mOykaB72GOZmiEe2FJ3sTjcu9AnB7iMd8XhkVMMRkfK9/6BOrsPawHyWzMRwKZW5kc3RyZWFtCmVuZG9iagozNyAwIG9iago8PCAvQkJveCBbIDAgMCA3MiA3MiBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTYyCi9NYXRyaXggWyAxIDAgMCAxIDAgNDc1LjUzMjA0Mzk1MDkgXSAvUGFpbnRUeXBlIDEgL1BhdHRlcm5UeXBlIDEKL1Jlc291cmNlcyA8PCAvUHJvY3NldHMgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KL1RpbGluZ1R5cGUgMSAvVHlwZSAvUGF0dGVybiAvWFN0ZXAgNzIgL1lTdGVwIDcyID4+CnN0cmVhbQp4nHWPMQ7DMAwDd72CH3AhO4rirF2y9w9tl3jJ0u+XdOfChAFT1olyOM/jML+tXvf0rceC/4/rPRu2Jl1PvKziY1aWBDWMV/WOk46DGhaNTpPTAhSdjj1l1A5q2BrYfRr822iko4eMhKCZ2MTU5GG/2aclioqspGhsLLOZnSka0WXiyV5F4/AyA3B6iMd8ZWZUwBCT8cvcQ0sswtrdvkeQN8QKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8IC9IMSAzNiAwIFIgL0gyIDM3IDAgUiA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCA+PgplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKMzggMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDIwMDUyMDEyMDg0Ni0wNCcwMCcpCi9DcmVhdG9yIChtYXRwbG90bGliIDMuMS4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFja2VuZCAzLjEuMykgPj4KZW5kb2JqCnhyZWYKMCAzOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAwOTY1MSAwMDAwMCBuIAowMDAwMDA4NTc1IDAwMDAwIG4gCjAwMDAwMDg2MDcgMDAwMDAgbiAKMDAwMDAwOTU2NiAwMDAwMCBuIAowMDAwMDA5NjA5IDAwMDAwIG4gCjAwMDAwMDk2MzAgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk4IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMTYxMiAwMDAwMCBuIAowMDAwMDA3Mjk2IDAwMDAwIG4gCjAwMDAwMDcwOTYgMDAwMDAgbiAKMDAwMDAwNjcwMSAwMDAwMCBuIAowMDAwMDA4MzQ5IDAwMDAwIG4gCjAwMDAwMDE2MzMgMDAwMDAgbiAKMDAwMDAwMTkzOCAwMDAwMCBuIAowMDAwMDAyMzQ5IDAwMDAwIG4gCjAwMDAwMDI0ODUgMDAwMDAgbiAKMDAwMDAwMjYyNyAwMDAwMCBuIAowMDAwMDAzMDA0IDAwMDAwIG4gCjAwMDAwMDMzMDcgMDAwMDAgbiAKMDAwMDAwMzYwNyAwMDAwMCBuIAowMDAwMDAzOTI1IDAwMDAwIG4gCjAwMDAwMDQxMzEgMDAwMDAgbiAKMDAwMDAwNDU0MiAwMDAwMCBuIAowMDAwMDA0NjgyIDAwMDAwIG4gCjAwMDAwMDQ3OTkgMDAwMDAgbiAKMDAwMDAwNTAzMyAwMDAwMCBuIAowMDAwMDA1MzIwIDAwMDAwIG4gCjAwMDAwMDU2MjkgMDAwMDAgbiAKMDAwMDAwNTg1OSAwMDAwMCBuIAowMDAwMDA2MjY0IDAwMDAwIG4gCjAwMDAwMDYzNTMgMDAwMDAgbiAKMDAwMDAwNjU1NyAwMDAwMCBuIAowMDAwMDA4NzA2IDAwMDAwIG4gCjAwMDAwMDkxMzEgMDAwMDAgbiAKMDAwMDAwOTcxMSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDM4IDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSAzOSA+PgpzdGFydHhyZWYKOTg2NQolJUVPRgo=\n",
      "image/png": "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0bu377//frkvOgAceerTdmbr1q3lTt+yZYsklXt6XEVHyFq3bq02bdpUeU1ERkZGib6rGkNVik4p3LRpU7XyABIXxRRQT7Rs2VKSypx+I0lDhgxRp06dtGDBAn3++eeaOXNm8XUOpXXr1k39+/fXgQMHNHXq1CrXe/DgwcMffDmK7qYVecoQgPiqD9uZN998s8y0goICvf3225KC68Kq65xzztGuXbv0j3/8o1r5og8WLm8Me/bs0apVq6rVT8+ePdWoUSO99dZbysvLqzLP9hJIXBRTQIJ45pln9Nprr6mwsLDMvC1bthS/G9ynT58y85OSkjRmzBgVFBTo6quv1hdffKEBAwZUeArJQw89pFatWul3v/ud7r33XuXn55fJbNy4UVdccYWWLVt2mM+sfEW3aN64cWOt9A+grIawnVm8eLHmz59fYtr06dO1du1a9evXr/goUnUUHYkbP368vvzyyzLz8/LytHz58uLHQ4cOVZs2bTRr1iy9//77JbLZ2dnVPgp31FFH6YorrtDmzZs1YcKEMr+Pffv2leiL7SWQuLhmCkgQ7733nh544AF16tRJvXv3Lr7z1Pr16/Xyyy9r//79Gjp0qEaOHFnu8uPHj9ddd92lpUuXSip7QXikk08+WYsWLdKll16qCRMm6IEHHtAFF1yg9PR05eXlafXq1XrnnXdkZrr11ltj/2QlXXDBBZo9e7ZGjBihAQMGqGnTpsrIyNA111xTK+sD0DC2M4MHD9bw4cM1fPhwHX/88Vq9erUWLFigtm3b6uGHH67BTyPYDk2ZMkWTJk3SCSecoAEDBqhbt27at2+fNmzYoDfffFO9e/fWwoULJUktWrTQH//4R40aNUrf+973SnzO1EcffaQ+ffrorbfeqta6p0+fro8++kiPPPKIlixZoosvvlgpKSlav369Fi1apHnz5ikzM7N4nFOnTtX48eM1cuRItWjRQmlpabrhhhtq9HwB1IJ435udRjuSmir5/JeNGzf69OnTfdiwYX7iiSd6y5YtPTk52Tt16uSXXHKJP/nkk2U+i6S0/v37uyTv0qWL5+fnV5p1Dz4z5b777vPMzMziz4pp1aqVn3HGGX7bbbeV+7ksFVENP2cqPz/fJ02a5N26dfOkpKQKly+9Dk+A3yONlsitoW5nij73KScnx1966SU/55xzvFmzZt66dWsfMWKE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yZIS+U2bNnl6erp36tTJDxw4UDw9KyvLJXmzZs185cqVFT7v8pQ3hiKjR492Sb5+/friaevXr3dJPnr06Gr1H/4e4v73QKPRaDQareE3TvMD6khSUpKSk5PLTG/fvn3x93//+9/17rvvqkePHrr11lvLzaamphY/zsjIUOPGjcvkxo4dq1atWmnRokVVjuvll1/W2rVr9bOf/Ux9+/YtMS89PV0TJ07Uli1b9Ne//rXMsj/+8Y91+umnV7kOAACAhojT/IA6cPXVV+uWW27Rd77zHY0aNUp9+/ZVr169dNRRR5XILV++XJJ08cUXq1Gjqt/rOHTokP7whz/oz3/+sz7++GPt2bNHhYWFxfM3bdpUZR/Lli2TJG3YsEHZ2dll5n/22WeSpDVr1pQ51a9nz55V9g8AANBQUUwBdeAXv/iF2rdvr4cfflgPPvigpk2bJjNT3759NXXqVJ111lmSpN27d0tStW8NPmrUKL3wwgs69thjNXToUHXq1ElNmjSRJE2bNk0HDx6sso8dO3ZIkmbPnl1pbt++fWWmVfb5UAAAAA0dxRRQR6699lpde+212r17t95991298MIL+tOf/qSLL75Ya9asUYcOHZSWliapekeU3n//fb3wwgvq37+/FixYUOIUwsLCQt19993VGlfr1q0lSS+++KKGDBlSo+dkZjXKAwAANCRcMwXUsbS0NA0YMECPPvqoxowZo507d2rp0qWSpHPOOUeStGjRohKn65XnX//6lyRpyJAhZa7F+tvf/qb9+/dXazxF6ywaQ6IpuiasoKAgziMBAAAoiWIKqAMLFy5Ufn5+menbtm2TJDVr1kySdOaZZ+q8887TqlWrdNddd5XJ79ixQwcOHJCk4s90WrJkSZk+//M//7PaYxs6dKiOO+44/f73v9eCBQvKzSxbtkxff/11tfuMpTZt2sjMtHHjxrisHwAAoCKc5gfUgSuuuEKpqanq3bu3unbtKnfX0qVLtWLFCp155pnq379/cfapp55SZmamfvnLX2rOnDnKzMyUu+uzzz7Tq6++qk8++URdu3bVd7/7XfXq1UvPP/+8zjvvPPXu3Vtbt27VK6+8opNOOknp6enVGltycrKef/55XXzxxRo4cKDOO+889ejRQ82aNdPnn3+uFStWaN26ddq8eXNx0VeXWrRoobPPPltLly7V1VdfrRNPPFGN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v/22zj33XJ122mnVfh67du1Sv379tHr1ap100kkaO3asUlJStHbtWv3pT3/SiBEj1LFjR2VlZWnu3LlavXq1brzxRqWlpUlS8dcGLd7VHI1Ga/hNlbwDuXLlSk9OTnYz8x/84Ac+Z84cz83NrTDv7p6fn+/p6eluZr5u3boS8w4ePOhHHXWUJyUl+ebNm4unP/HEEy7Je/XqVWnfNaUKjiyVPjJVhNP8aDQareHuF4qOTEnyl156qcS8adOmuSQ///zzS0wvOlKUnp5eZuzu7osXL3ZJfu6555Y5ClW0vptuuql42ldffeVt27b1pKQkX7FiRYn8TTfdVDy+6hyZuvLKK12SX3fddV5QUFBi3t69e0uchnmknubH3fwAxNXpp5+up556Sh07dtRTTz2lSy+9VF27dlW7du00fPjwMjd2kKTGjRtr7Nixcnc99thjJebNnTtX27dv1+DBg0vcVW/z5s2SpC5dutTuEwIAHJaGsF84//zzNWjQoBLTbrjhBh133HFavHixNmzYUGaZiRMnqlu3bmWmP/jgg5KCo2ulj/SMGTNGPXr00NNPP1087cUXX9TOnTt11VVX6ayzziqRz87OrvZNJrZt26Znn31WnTt31j333KNGjUqWDS1btuSGFeLW6AASwOWXX66NGzdq0aJF+tWvfqVBgwapsLBQc+fO1ZAhQzR69OiidzKLjRs3To0aNVJOTo4KCgqKp8+YMUOS9OMf/7hEvmh5bksOAImvvu8X+vbtW2Za48aN1bt3b0nSBx98UGZ+z549y+1r2bJlSk5O1uzZs5WdnV2mffPNN9q+fbt27NghSVq5cmWFY2jdurV69OhRreewYsUKFRYWqk+fPmrevHm1ljkScc0UgISQnJysiy66SBdddJGk4Na4c+bM0dixY/XEE09o+PDhGjZsWHE+IyNDF154oRYtWqQFCxZo8ODBys3N1euvv66MjIzifoqkp6dLkr744ou6e1IAgKjV5/1Cx44dy51edGRsz549Fc4rbceOHcrPz9fkyZMrXee+ffvUrl274r6rGkNVdu/eLSm4bToqxpEpAAmpcePGuvzyy3XzzTdLkhYvXlwmU/QuY9GFxY899pjcXT/60Y/KnI5Q9G7g+++/X+5ODACQ2OrTfmHr1q3lTt+yZYsklXt6XEVHyFq3bq02bdpUee1ORkZGib6rGkNVik4p3LRpU7XyRyqKKQAJrWXLlpJU5nQOSRoyZIg6deqkBQsW6PPPP9fMmTOLz5svrVu3burfv78OHDigqVOnVrnegwcPHv7gy1F0d6bIU1AAANVXH/YLb775ZplpBQUFevvttyUF14VV1znnnKNdu3bpH//4R7XyRR8sXN4Y9uzZo1WrVlWrn549e6pRo0Z66623lJeXV2X+SN2/UUwBiKtnnnlGr732mgoLC8vM27JlS/G7i3369CkzPykpSWPGjFFBQYGuvvpqffHFFxowYECFpyQ89NBDatWqlX73u9/p3nvvVX5+fpnMxo0bdcUVV2jZsmWH+czKV3TL340bN9ZK/wBQ3zWE/cLixYs1f/78EtOmT5+utWvXql+/fsVHkaqj6Ejc+PHj9eWXX5aZn5eXp+XLlxc/Hjp0qNq0aaNZs2bp/fffL5HNzs6u9lG4o446SldccYU2b96sCRMmlPl97Nu3r0RfR+r+jWumAMTVe++9pwceeECdOnVS7969i+9ktH79er388svav3+/hg4dqpEjR5a7/Pjx43XXXXdp6dKlkspeYBzp5JNP1qJFi3TppZdqwoQJeuCBB3TBBRcoPT1deXl5Wr16td555x2ZmW699dbYP1lJF1xwgWbPnq0RI0ZowIABatq0qTIyMnTNNdfUyvoAoL5pCPuFwYMHa/jw4Ro+fLiOP/54rV69WgsWLFDbtm318MMP1+CnEew3pkyZokmTJumEE07QgAED1K1bN+3bt08bNmzQm2++qd69e2vhwoWSpBYtWuiPf/yjRo0ape9973slPmfqo48+Up8+ffTWW29Va93Tp0/XRx99pEceeURLlizRxRdfrJSUFK1fv16LFi3SvHnzlJmZWTzOqVOnavz48Ro5cqRatGihtLQ03XDDDTV6vvVOvO/NTqPRGn5TJZ8nsnHjRp8+fboPGzbMTzzxRG/ZsqUnJyd7p06d/JJLLvEnn3yyzGdblFb0CfZdunTx/Pz8SrPuwWdw3HfffZ6ZmVn82SOtWrXyM844w2+77bZyP+ejIqrh50zl5+f7pEmTvFu3bp6UlFTh8qXX4Qnwe6TRaLRYtYa6Xyj63KecnBx/6aWX/JxzzvFmzZp569atfcSIEf7Pf/6zzDLV/XympUuX+mWXXeadO3f25ORkb9++vXfv3t1vvvnmMp8n5e7+6qv/v707D7OjrvM9/v5Ch3RClKgxJIEhCYhsQgJh0SRjggTjwJAwzDA4oiQwjIrLRRaRQe6l9UEFlEUGuSpeEwYEnYwEEAKIjJnJM4AsLTKaICDpyJYOgizBNGb53T+qujnpvavPluT9ep56OufUp36/X6dP16++51RV/zRNmzYtDRs2LI0cOTLNmTMnrVixotv+evo7UymltHbt2nThhRem/fffPw0bNiyNGDEi7bPPPun0009Pra2tm2UvvfTStPfee6cddtghAWn8+PE9fj9by9wW2fciSZUTEcl9TXERQUrJe7pL2mpsrfPCwoULOfnkk1mwYAHz58+v9XDq2tYyt3nNlCRJkiQVYDElSZIkSQVYTEmSJElSAV4zJanittZz46tlazmvXJLaOS9oa5nb/GRKkiRJkgqwmJIkSZKkAiymJEmSJKkAiylJkiRJKsBiSpIkSZIKaKj1ACRtkE6W/wAAGkZJREFU/RobG1sjYudaj2NL1djY2FrrMUhSOTkvaGuZ27w1uqRtWkRcDhwIHJFS2ljr8UiStm4RcQRwNfCxlNIDtR6PBsfT/CRt644HZgBjaz0QSdI24Ujg3cAHaj0QDZ7FlCRJkiQVYDElSZIkSQVYTEmSJElSARZTkiRJklSAxZQkSZIkFWAxJUmSJEkFWExJkiRJUgEWU5IkSZJUgMWUJEmSJBVgMSVJkiRJBVhMSZIkSVIBFlOSJEmSVIDFlCRJkiQVYDElSZIkSQVYTEmSJElSARZTkiRJklSAxZQkSZIkFWAxJUmSJEkFWExJkiRJUgGRUip/oxHnAvPL3rAkld9e+dfXgWdqORBJ6odm4MQ0iAO4iDgE+DawY9lGpYHYq+Tfv63ZKLZtrwInp5R+M9iGKlVMPQ3sWvaGJUmStGtK6dmiG0fE14BzyzgeaUt0bkrp4sE20lCOkXQj8q+HA6sr1IcklUMD0AisrfVAJKkP/wmM5s3jrKLat78c+O4g21IxI4GXaz2IbdRZwKkM/vcIqFwx1e7JlJKnzUiSJA1SRKwvc5NrUkqPlblNqa5FxIvlbM8bUEiSJElSAZX6ZGo5sANQ1spPkiRpG1au46vl+dcVg2xH2hKV9fVfqRtQNACNKSWvQZAkSSqDch5fRcTIlJLX7GibVM7Xf0WKKUmSJEna2nnNlCRJkiQVYDElSZIkSQVYTEmSJElSARZTkiRJklSAxZQkSZIkFWAxJUmSJEkFWExJkiRJUgEWU5IkSZJUgMWUJEmSJBVgMSVJkiRJBVhMSZIkSVIBFlOSJEmSVIDFlCRJkiQVYDElSZIkSQVYTEmSJElSARZTkiRJklSAxZQkSZIkFWAxJUmSJEkFWExJkiRJUgEWU5IkSZJUgMWUJEmSJBXQUOsBSNqyDRs2bHVbW9vOtR6HoLGxsXXdunVjaj0OSZK2FZFSqvUYJG3BIiK5H6kPEUFKKWo9DkmSthWe5idJkiRJBVhMSZIkSVIBFlOSJEmSVIDFlCRJkiQVYDElaau3cOFCIoKFCxfWdBwPPfQQRx55JKNGjSIimDx5MgDz588nImhpaanp+CRJ0sB4a3RJqoJXX32Vo48+mra2Nj72sY8xatQoxozp+S7mLS0tTJw4kXnz5tW8CJQkSd2zmJKkKnjggQdYs2YNX/nKVzjvvPM2W/e1r32Nc889l1122aVGo5MkSUVYTElSFTz33HMAjBs3rsu6sWPHMnbs2GoPSZIkDZLXTEmqqFtvvZUjjjiCsWPHMnToUMaNG8eMGTO4+uqru2RfeuklvvjFL/Ke97yH4cOHs9NOOzFp0iTOPfdcXn/99Y7cww8/zOmnn86kSZN4+9vfTmNjI3vuuSdnnXUWf/zjHwc0vmeeeYbPfOYz7L777gwdOpR3vOMdzJkzhwcffLBLtqmpiYhg6dKl3HDDDRx22GGMGDGCCRMm9Nh+S0sLEcG8efMAOPnkk4mIza7h6nzNVFNTExMnTgTg2muv7cjXw3VfkiTpTX4yJalivvvd7/KJT3yCMWPGcMwxxzBq1CjWrFnDo48+yoIFC/jUpz7VkV25ciWHH344q1atYsqUKZx22mls2rSJxx9/nMsvv5xPfvKT7LjjjgBcc801LF68mBkzZjBr1iw2btxIc3Mzl112GXfccQe/+MUveMtb3tLn+Jqbm/ngBz/ISy+9xOzZsznuuOP4wx/+wM0338z06dNZvHgxRx11VJftLr30Uu6++26OOeYYDj/8cF555ZUe+xg5ciQXXHABjzzyCLfccgtz587tuPFE+9fOZs6cycsvv8w3v/lNJk2axLHHHtuxrqdtJElSDaSUXFxcXAov2W6kewcddFDaYYcdUmtra5d1L7zwwmaPp06dmoD01a9+tdvsunXrOh63tLSkDRs2dMl973vfS0C66KKLNnt+wYIFCUgLFizoeG79+vVpjz32SEOHDk1Lly7dLP/ss8+mcePGpTFjxqS2traO5y+44IIEpOHDh6fm5uYev+/udDeGdvPmzUtAWrlyZcdzK1euTECaN29ev/vIfxY1f024uLi4uLhsK4un+UmqqIaGBoYMGdLl+VGjRnX8++GHH+bee+9l8uTJfOELX+g229jY2PF4/PjxbL/99l1yp5xyCm9961u56667+hzX7bffzu9+9zs++9nPMmPGjM3WjRs3jnPOOYfVq1dzzz33dNn24x//OAceeGCffUiSpK2bp/lJqpgTTzyRs846i/32248TTjiBGTNmMG3aNN75zndulrv//vsBmD17Nttt1/d7POvXr+c73/kOP/zhD1m+fDmvvPIKmzZt6lj/7LPP9tnGfffdB8CqVatoamrqsv6JJ54AYMWKFV1O9Tv00EP7bF+SJG39LKYkVcyZZ57JqFGjuPrqq7nyyiu54ooriAhmzJjB17/+dQ4++GAAXn75ZYB+3xr8hBNOYPHixey+++7MnTuXMWPGMHToUACuuOIK3njjjT7bePHFFwFYtGhRr7m1a9d2ea63vw8lSZK2HRZTkirqpJNO4qSTTuLll1/m3nvvZfHixXz/+99n9uzZrFixgtGjRzNy5Eigf58oPfTQQyxevJhZs2axZMmSzU4h3LRpE5dcckm/xrXTTjsBcMsttzBnzpwBfU8RMaC8JEnaOnnNlKSqGDlyJEcddRTXXHMN8+fP56WXXmLZsmUAvPe97wXgrrvu2ux0ve48+eSTAMyZM6fLtVgPPPAA69at69d42vtsH0O9ab8mbOPGjTUeiSRJ6onFlKSKufPOO9mwYUOX59esWQPA8OHDAZgyZQpTp07lkUce4eKLL+6Sf/HFF2lrawPo+JtOS5cu7dLmpz/96X6Pbe7cueyxxx5861vfYsmSJd1m7rvvPv70pz/1u81yetvb3kZE8Pvf/74m/UuSpL55mp+kivnwhz9MY2Mj06dPZ8KECaSUWLZsGQ8++CBTpkxh1qxZHdnrr7+emTNnct555/HjH/+YmTNnklLiiSee4Kc//SmPPfYYEyZM4JBDDmHatGncdNNNTJ06lenTp9Pa2sodd9zBXnvtxbhx4/o1tiFDhnDTTTcxe/Zsjj76aKZOncrkyZMZPnw4Tz/9NA8++CBPPfUUzz//fEfRV00jRozgsMMOY9myZZx44om8+93vZvvtt2fOnDkccMABVR+PJEnqymJKUsVcdNFF3HXXXTQ3N7NkyRIaGxsZP348F198Maeddtpmp+lNnDiR5uZmLrnkEm6++WauuuoqGhsbmTBhAmeddRajR48GstPfbr31Vs4//3yWLFnClVdeyS677MKpp57K+eefz7777tvv8R1wwAH86le/4rLLLuO2225jwYIFbLfddowdO5YDDzyQL33pS5vdwr3arrvuOs444wzuvPNObrzxRlJK7LrrrhZTkiTViUgp1XoMkrZgEZHcj9SHiCCl5N0xJEmqEq+ZkiRJkqQCLKYkSZIkqQCLKUmSJEkqwGJKkiRJkgqwmJIkSZKkAiymJEmSJKkAiylJkiRJKsBiSpIkSZIKsJiSJEmSpAIaaj0ASVu2xsbG1ojYudbjUPazqPUYJEnalkRKqdZjkKSaiYh/BPZOKX2+1mORJElbFospSdu0iFgF7AaMSyk9X+vxSJKkLYfXTEna1m3f6askSVK/WExJkiRJUgEWU5IkSZJUgMWUJEmSJBVgMSVJkiRJBVhMSZIkSVIBFlOSJEmSVEBF/s5URPwL8E9lb1iSym9oyb/fqNkoJKl/moG/TCltrPVAJFWumHoG2KXsDUuSJOkvUkrP1HoQkqChwu3vCfjLLqneBVD+d5Ykqbx+B4yr9SAkvanSxVRbSqmtwn1IkiRt9SLCN32kOuMNKCRJkiSpgEoVU/cAvwFaK9S+JEnStsbjK6nOVOQGFAAREalSjUuSJG2DPL6S6kvFiilJkiRJ2pp5zZQkSZIkFWAxJUmSJEkFWExJkiRJUgEWU5IkSZJUgMWUJEmSJBVgMSVJkiRJBVhMSZIkSVIBFlOSJEmSVIDFlCRJkiQVYDElSZIkSQVYTEmSJElSARZTkiRJklSAxZQkSZIkFWAxJUmSJEkFWExJkiRJUgEWU5IkSZJUQMNAwsOGDWtta2sbXanBSJKk8mhsbGxdt27dmNLnhgwZsnrDhg0712pMqqyGhobW9evXd/zM/XlL/dP5d2cgIqXU/3BE6iu/dOlSjj/+eBYtWsTMmTP7bNO8efPmzZs3X/58RJBSitJMRKSmpiYAVq5cyaJFizj++OOZOHFin+2br/98U1PTZj/z0p+3pJ51/t0ZiLKe5lfvE4t58+bNmzdvvj4O/M1XLi+pespWTNXbRGHevHnz5s2b76reDvzNlzcvqbrKUkzV20Rh3rx58+bNm+9ePR34my9vXlL1DbqYqreJwrx58+bNmzffs3o58Ddf/ryk6htUMVVvE4V58+bNmzdvvnf1cuBvvvx5SdVXuJiqt4nCvHnz5s2bNz949VoomO87L6n6ChVT9TZRmDdv3rx58+YHr54LBfODz0sqvwEXU/U2UZg3b968efPmB6/eDvzNlzcvqTIGXEzV00Rh3rx58+bNm+8+PxD1duBvvrx5SZUz4GKqniYK8+bNmzdv3nz3+f6qtwN/8+XNS6qsARdT9TRRmDdv3rx58+a7z/dHvR34my9vXlLlDbiY6ks9TyzmzZs3b968+Uy9HfibL29eUnWUtZiqt4nCvHnz5s2bN99VvR34my9vXlL1lK2YqreJwrx58+bNmzffVb0d+Jsvb15SdZWlmKq3icK8efPmzZs33716OvA3X968pOobdDFVbxOFefPmzZs3b75n9XLgb778eUnVN6hiqt4mCvPmzZs3b9587+rlwN98+fOSqq9wMVVvE4V58+bNmzdvfvDqtVAw33deUvUVKqbqbaIwb968efPmzQ9ePRcK5gefl1R+Ay6m6m2iMG/evHnz5s0PXr0d+Jsvb15SZQy4mKqnicK8efPmzZs3331+IOrtwN98efOSKmfAxVQ9TRTmzZs3b968+e7z/VVvB/7my5uXVFkDLqbqaaIwb968efPmzXef7496O/A3X968pMobcDHVl3qeWMybN2/evHnzmXo78Ddf3ryk6ihrMVVvE4V58+bNmzdvvqt6O/A3X968pOopWzFVbxOFefPmzZs3b76rejvwN1/evKTqKksxVW8ThXnz5s2bN2++e/V04G++vHlJ1TfoYqreJgrz5s2bN2/efM/q5cDffPnzkqpvUMVUvU0U5s2bN2/evPne1cuBv/ny5yVVX+Fiqt4mCvPmzZs3b9784NVroWC+77yk6ouUUr/Dw4YNW93W1rZzBccjSZLKoLGxsXXdunVjSp8bMmTI6g0bNjiPb6UaGhpa169f3/Ez9+ct9U/n352BGFAxJUmSJEnKDPoGFJKqIyKWRsRVA9ymJSLOrtSYSvrZLiK+ExEvRkSKiJn92GZCnj24l8zBeWZCGYcrqco677/6sz+LiF9HRFO5+66UiBgTET+NiNcjol/vVEfE/IhY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\n",
      "text/plain": [
       "<Figure size 1080x576 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mglearn.plots.plot_proper_processing()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "rnd = np.random.RandomState(seed=0)\n",
    "X = rnd.normal(size=(100, 10000))\n",
    "y = rnd.normal(size=(100,))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_selected.shape: (100, 500)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.feature_selection import SelectPercentile, f_regression\n",
    "\n",
    "select = SelectPercentile(score_func=f_regression, percentile=5).fit(X, y)\n",
    "X_selected = select.transform(X)\n",
    "print(\"X_selected.shape: {}\".format(X_selected.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cross-validation accuracy (cv only on ridge): 0.91\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.linear_model import Ridge\n",
    "print(\"Cross-validation accuracy (cv only on ridge): {:.2f}\".format(\n",
    "      np.mean(cross_val_score(Ridge(), X_selected, y, cv=5))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cross-validation accuracy (pipeline): -0.25\n"
     ]
    }
   ],
   "source": [
    "pipe = Pipeline([(\"select\", SelectPercentile(score_func=f_regression,\n",
    "                                             percentile=5)),\n",
    "                 (\"ridge\", Ridge())])\n",
    "print(\"Cross-validation accuracy (pipeline): {:.2f}\".format(\n",
    "      np.mean(cross_val_score(pipe, X, y, cv=5))))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The General Pipeline Interface"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit(self, X, y):\n",
    "    X_transformed = X\n",
    "    for name, estimator in self.steps[:-1]:\n",
    "        # iterate over all but the final step\n",
    "        # fit and transform the data\n",
    "        X_transformed = estimator.fit_transform(X_transformed, y)\n",
    "    # fit the last step\n",
    "    self.steps[-1][1].fit(X_transformed, y)\n",
    "    return self"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(self, X):\n",
    "    X_transformed = X\n",
    "    for step in self.steps[:-1]:\n",
    "        # iterate over all but the final step\n",
    "        # transform the data\n",
    "        X_transformed = step[1].transform(X_transformed)\n",
    "    # predict using the last step\n",
    "    return self.steps[-1][1].predict(X_transformed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![pipeline_illustration](images/pipeline.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convenient Pipeline creation with ``make_pipeline``"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import make_pipeline\n",
    "# standard syntax\n",
    "pipe_long = Pipeline([(\"scaler\", MinMaxScaler()), (\"svm\", SVC(C=100))])\n",
    "# abbreviated syntax\n",
    "pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline steps:\n",
      "[('minmaxscaler', MinMaxScaler()), ('svc', SVC(C=100))]\n"
     ]
    }
   ],
   "source": [
    "print(\"Pipeline steps:\\n{}\".format(pipe_short.steps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline steps:\n",
      "[('standardscaler-1', StandardScaler()), ('pca', PCA(n_components=2)), ('standardscaler-2', StandardScaler())]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.decomposition import PCA\n",
    "\n",
    "pipe = make_pipeline(StandardScaler(), PCA(n_components=2), StandardScaler())\n",
    "print(\"Pipeline steps:\\n{}\".format(pipe.steps))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Accessing step attributes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "components.shape: (2, 30)\n"
     ]
    }
   ],
   "source": [
    "# fit the pipeline defined before to the cancer dataset\n",
    "pipe.fit(cancer.data)\n",
    "# extract the first two principal components from the \"pca\" step\n",
    "components = pipe.named_steps[\"pca\"].components_\n",
    "print(\"components.shape: {}\".format(components.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Accessing Attributes in a Pipeline inside GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "pipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "param_grid = {'logisticregression__C': [0.01, 0.1, 1, 10, 100]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5,\n",
       "             estimator=Pipeline(steps=[('standardscaler', StandardScaler()),\n",
       "                                       ('logisticregression',\n",
       "                                        LogisticRegression(max_iter=1000))]),\n",
       "             param_grid={'logisticregression__C': [0.01, 0.1, 1, 10, 100]})"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    cancer.data, cancer.target, random_state=4)\n",
    "grid = GridSearchCV(pipe, param_grid, cv=5)\n",
    "grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best estimator:\n",
      "Pipeline(steps=[('standardscaler', StandardScaler()),\n",
      "                ('logisticregression', LogisticRegression(C=1, max_iter=1000))])\n"
     ]
    }
   ],
   "source": [
    "print(\"Best estimator:\\n{}\".format(grid.best_estimator_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Logistic regression step:\n",
      "LogisticRegression(C=1, max_iter=1000)\n"
     ]
    }
   ],
   "source": [
    "print(\"Logistic regression step:\\n{}\".format(\n",
    "      grid.best_estimator_.named_steps[\"logisticregression\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Logistic regression coefficients:\n",
      "[[-0.436 -0.343 -0.408 -0.534 -0.15   0.61  -0.726 -0.785  0.039  0.275\n",
      "  -1.298  0.049 -0.673 -0.934 -0.139  0.45  -0.13  -0.101  0.434  0.716\n",
      "  -1.091 -1.095 -0.852 -1.064 -0.743  0.073 -0.823 -0.653 -0.644 -0.42 ]]\n"
     ]
    }
   ],
   "source": [
    "print(\"Logistic regression coefficients:\\n{}\".format(\n",
    "      grid.best_estimator_.named_steps[\"logisticregression\"].coef_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Grid-searching preprocessing steps and model parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_boston\n",
    "boston = load_boston()\n",
    "X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target,\n",
    "                                                    random_state=0)\n",
    "\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "pipe = make_pipeline(\n",
    "    StandardScaler(),\n",
    "    PolynomialFeatures(),\n",
    "    Ridge())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "param_grid = {'polynomialfeatures__degree': [1, 2, 3],\n",
    "              'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5,\n",
       "             estimator=Pipeline(steps=[('standardscaler', StandardScaler()),\n",
       "                                       ('polynomialfeatures',\n",
       "                                        PolynomialFeatures()),\n",
       "                                       ('ridge', Ridge())]),\n",
       "             n_jobs=-1,\n",
       "             param_grid={'polynomialfeatures__degree': [1, 2, 3],\n",
       "                         'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]})"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid = GridSearchCV(pipe, param_grid=param_grid, cv=5, n_jobs=-1)\n",
    "grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PolyCollection at 0x24f81d6d848>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/pdf": "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LTIzNiAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE5hbWUgL0RlamFWdVNhbnMgL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDEzNDIgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjEyIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjE1IDAgb2JqCjw8IC9hIDE2IDAgUiAvZCAxNyAwIFIgL2UgMTggMCBSIC9laWdodCAxOSAwIFIgL2YgMjAgMCBSIC9maXZlIDIxIDAgUgovZyAyMiAwIFIgL2ggMjMgMCBSIC9oeXBoZW4gMjQgMCBSIC9pIDI1IDAgUiAvbCAyNiAwIFIgL20gMjcgMCBSIC9uIDI4IDAgUgovbmluZSAyOSAwIFIgL28gMzAgMCBSIC9vbmUgMzEgMCBSIC9wIDMyIDAgUiAvcGVyaW9kIDMzIDAgUiAvciAzNCAwIFIKL3MgMzUgMCBSIC9zZXZlbiAzNiAwIFIgL3NpeCAzNyAwIFIgL3QgMzggMCBSIC90aHJlZSAzOSAwIFIgL3R3byA0MCAwIFIKL3UgNDEgMCBSIC91bmRlcnNjb3JlIDQyIDAgUiAveSA0MyAwIFIgL3plcm8gNDQgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0NvdW50IDEgL0tpZHMgWyAxMCAwIFIgXSAvVHlwZSAvUGFnZXMgPj4KZW5kb2JqCjQ1IDAgb2JqCjw8IC9DcmVhdGlvbkRhdGUgKEQ6MjAyMDA1MjAxMjA4NDctMDQnMDAnKQovQ3JlYXRvciAobWF0cGxvdGxpYiAzLjEuMywgaHR0cDovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKG1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgMy4xLjMpID4+CmVuZG9iagp4cmVmCjAgNDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTE2NTkgMDAwMDAgbiAKMDAwMDAxMTQ2NSAwMDAwMCBuIAowMDAwMDExNDk3IDAwMDAwIG4gCjAwMDAwMTE1OTYgMDAwMDAgbiAKMDAwMDAxMTYxNyAwMDAwMCBuIAowMDAwMDExNjM4IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5NCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDE1NzUgMDAwMDAgbiAKMDAwMDAxMDA1NCAwMDAwMCBuIAowMDAwMDA5ODU0IDAwMDAwIG4gCjAwMDAwMDkzOTcgMDAwMDAgbiAKMDAwMDAxMTEwNyAwMDAwMCBuIAowMDAwMDAxNTk2IDAwMDAwIG4gCjAwMDAwMDE5NzMgMDAwMDAgbiAKMDAwMDAwMjI3MyAwMDAwMCBuIAowMDAwMDAyNTkxIDAwMDAwIG4gCjAwMDAwMDMwNTYgMDAwMDAgbiAKMDAwMDAwMzI2MiAwMDAwMCBuIAowMDAwMDAzNTgyIDAwMDAwIG4gCjAwMDAwMDM5OTMgMDAwMDAgbiAKMDAwMDAwNDIyOSAwMDAwMCBuIAowMDAwMDA0MzUzIDAwMDAwIG4gCjAwMDAwMDQ0OTMgMDAwMDAgbiAKMDAwMDAwNDYxMCAwMDAwMCBuIAowMDAwMDA0OTM4IDAwMDAwIG4gCjAwMDAwMDUxNzIgMDAwMDAgbiAKMDAwMDAwNTU2NSAwMDAwMCBuIAowMDAwMDA1ODUyIDAwMDAwIG4gCjAwMDAwMDYwMDQgMDAwMDAgbiAKMDAwMDAwNjMxMyAwMDAwMCBuIAowMDAwMDA2NDM0IDAwMDAwIG4gCjAwMDAwMDY2NjQgMDAwMDAgbiAKMDAwMDAwNzA2OSAwMDAwMCBuIAowMDAwMDA3MjA5IDAwMDAwIG4gCjAwMDAwMDc1OTkgMDAwMDAgbiAKMDAwMDAwNzgwMyAwMDAwMCBuIAowMDAwMDA4MjE0IDAwMDAwIG4gCjAwMDAwMDg1MzUgMDAwMDAgbiAKMDAwMDAwODc3OSAwMDAwMCBuIAowMDAwMDA4OTAzIDAwMDAwIG4gCjAwMDAwMDkxMTQgMDAwMDAgbiAKMDAwMDAxMTcxOSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDQ1IDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSA0NiA+PgpzdGFydHhyZWYKMTE4NzMKJSVFT0YK\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAADVCAYAAACyqoAcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3dd3hUZfbA8e9JJYUWWiCU0AVFuggWQBYQpNkLNsSCYl1ldXUXe2FRrIuu7tr2p9h2FbABIogK0kEQEKXXQAokpGfm/P6YIaTCXDKTMns+zzNPcu9978w5zOXknffeea+oKsYYY4JTSFUHYIwxJnCsyBtjTBCzIm+MMUHMirwxxgQxK/LGGBPEwqo6gKIiJFJrEVPVYRjzPyeqU1VHEFgiVR1BYCVtSEtW1UZlbatWRb4WMfSRQVUdhjH/c057P7SqQwiocHFVdQgBNbXbJzvK22bDNcYYE8SsyBtjTBCzIm+MMUHMirwxxgQxK/LGGBPErMgbY0wQsyJvjDFBzIq8McYEMSvyxhgTxKzIG2NMELMib4wxQcyKvDHGBDEr8sYYE8SsyBtjTBBzVORFJEpEOgYqGGOMMf7lc5EXkZHAGuBr73I3EZkVqMCMMcZUnJOe/CPAGcAhAFVdAyT6PyRjjDH+4qTIF6jq4YBFYowxxu+c3P5vvYhcBYSKSHvgTmBxYMIyxhjjD0568ncApwK5wPvAYeDuQARljDHGP3zuyatqFvCQiDylqpkBjMkYY4yfOLm6pp+IbAA2epe7isj0gEVmjDGmwpyMyT8PDAVmAajqWhE5NyBROXB6/8489tn97N92AIAfPl3K/z3+CQAX3X0Bw8YPQlXZvm4nU2+YTn5uPqMnns+Fd11AQrt4Lm50A+kpGWU+91NfPkSnM9uz/odN/HXUM4Xr4xMb8+CMu6kTF8tvq7Yx5dqXKcgv8HtuLTo24743J9KuR2ve+ssMPnluduG2mLrR/PGNW0k8rQWo8uz4V9n402Zq14/loQ/uIT6xEfu3H+SJy6dx5FDpD143PjOWM4b3AOC9J/7Ddx8trtTcfM01PDKcad89RnhkGKFhoXz/n59495GPSu1/8T0jGDZ+EK4CF4cPpvPs+Okc2JkMwOBr+zP2oYs9uT75H+a9+13A8zmR214cxxnDepCblcvUcX/n99XbSrVp36MNk96aSERUBMu+WsX0u94C4LrHLqffqN6oWzl04DBTx/2dlH1plZ1Cubb/uI/vpq7G7VZOG9OG3jd0KtVm89yd/PTaLyDQqEM9hj3dF4AXe35Eg3Z1AagTH82oF8+p1Nh9se3H/cz/2xrUrZx+YWv63HBKqTab5uxi8T82AELjDnUZ8UwfAJ7t8QkNj+bXNJqLXjwr4PE6KfKo6i4RKbrKdbz2IlILWAREel/rE1V92GmQJ7Lu+43FijBAg2ZxjLljODeeeg95OXn85YN7GHjFWcx9ZyHrf9zET5+v5NkFjxz3eT9+diaR0ZFccPPgYutvfGYs/33hcxZ+uJi7Xr2J88efx+evzfV3WmSkHuHvd73JWWPOKLXtthfGsWLOah6/7DnCwsOIjI4A4PIHxrD623V8OOUzLr9/DFc8MIZ/PvBesX3PGN6Ddt3bMKH7JCIiw3lu4aMs/2o1WRnZlZabr7nm5+YzadCj5GTmEBoWyvPfP87yr1azcelvxdr9vnobE3vfT252HiMmDOGmKdfw5JXPU7t+LNdMvpSJvR9AVZm+YgpLZq0o8w9fZTljWHcS2jXl+g530KlPe+6cfhN39n2wVLs7p9/E87f8g40/bebJLx6k9/ndWP71Gj6eOot3Jn8IwJg7hnH15Et48dY3KjuNMrldbhY8s5KLXh1AbJMoZoydR5v+zWjQtm5hm7QdGSx/cyOXvT2IWnUiyErNKdwWFhnK1R8OrYrQfeJ2KfOeXs1lr51D7SbR/HvsfNr2b0bDtnUK26TtyGDpm79y1dsDqVUngswS+V3/0eCynjpgnJx43SUi/QAVkQgRuQ/v0M1x5ALnqWpXoBtwvoiceZKxOhYaFkJkVAQhoSFERkeSsjcVgC1rtpO04+AJ91/97XqyMrJLre923mks+uQnAOa+8x1nje7t38C9Dh1MZ/OKLaV60tG1o+hybme++te3ABTkF5B5OAuAfqN6M++dhQDMe2ch/UaX/gPRqnNzfl70C26Xm5ysXLb8vINe53er1NxKKi9XgJxMz3+SsPBQwsJDUdVSbdYu/IXc7DwANv60mUbN4wDoNbQrK7/5mYy0Ixw5lMnKb36mtzfXqtJ3dG+++bfn08TGpb8RWy+GuPh6xdrExdcjuk4UG3/aDMA3//6Oft4/gEWPyVoxkZTxz1Fl9q9PpW6L2tRtHktoeCgdhrZky8I9xdqs/3QrXS9rR606no5JdFytqgj1pOxbn0r9FrHUax5LaHgIpwxtwe8L9xZrs/a/2+h+edvC/GKqOD8nPfkJwItAArAbmAtMPN4O6vnfeMS7GO59+P2Q7Ny3A6+tnkrK3jRen/QuOzbsJmVvKp88N5v3drxKbnYeK+euZeW8nyv8WnUa1ObIoSzcLjcAybtTaJAQV+HndaJpmyYcPpjOpDcn0qZrK35btZXpd71FTlYu9ZvUJXX/IQBS9x+iXuM6pfbfunY710y+lP9M+5zI6Ei6DTiVnRt2VYvcyhISEsL0FVNo1i6eWdO/ZtOy34/bftj4QSz7ejUADRLiOLgruXBbdcipYbM4DuxKKVxO3p1Cw4S4wvcNoGFCHMm7j7U5uDuFhs2OxT3uiSv5wzXnknk4i0nnPVo5gfsg80A2tZtEFS7XbhLN/vUpxdqk7fAMj354/TeoWznzltNIPKspAAV5Lt6/ai4hYUKvcZ1oN7B55QXvgyMHsqkdXzS/KPatSy3WJm2Hp+S9d90C1K2cNaEzrc+KB6Agz827V80nJFToM64j7c9LCHjMPvXkRSQUuEZVx6pqE1VtrKpXq2qKL/uKyBrgADBPVZeW2H6ziKwQkRX55DpO4PdV2xibeBsTuk9i5itf8einfwIgtl4MfUf15po2E7ki4WZqxUQyaGzFx/dKDFd5VHJPKjQshPY9WjP7tTnc2vNP5GTmcvkDY3zef+W8n1n21Wpe/PFJHnz/bjYs2YyrwF0tciuL2+1mQo9JXNniFjr2bkfiqS3KbTto7Dl06NmGj6d6ZtwoO6eqTaqsmEqFVGabY43e+ssMxra6lW/f/57Rt5/v7xBPmi//supyc2hnBpe8cR7Dnu7LN48tJyfD8yls/Jcjuer9IQx7qi/fTV3NoV1HTvBslaysBEu8VW6Xm7SdR7jin/0Z8Uwfvn50JTnpnvwmfDWca98fxIinz+DbqWtJq4T8fCryquoCRp/MC6iqS1W7Ac2BM0TktBLbX1fVXqraK5xIn55z1G1DeW3VVF5bNZWo2FqFH+eXfbWa0PBQ6jSoTY8/dGH/9gMcTk7HVeDih0+X0rlfxedWO5ycTmy9aEJCPf90DZs3KBwG8oeiuTVoWr/MNgd3p3Jwd0phj3bRJ0to370NAGlJhws/+sfF1+PQgfQyn+P9p/7LhB6TeGDo44gIe37bF/DcSvIl16IyD2ex9rtfCoeWSuo+qAtXPXgRk0dPIT/PM+yTvDuFRi0aFrbx5FT5JymL5pqyL5XGLRqUiKn4v3Py7hQaNj/WplHzBmWeXP32/R84+6I+gQvcodjGUWQkHRtOykjKIqZRVIk20bQZkEBoeAh1E2Kpn1ibQzszCvcHqNs8lua9GnNwU/U5oQwQ2ySKjP1F88smtkR+tZtE035AM0LDQ6iXEENcYixpOz3F/Gh+9ZrH0qJXIw5sOkSgORmT/1FEXhGRc0Skx9GHrzur6iFgIVDhbses6XOY0GMSE3pMwu0+9qe1Y+92hISEkJ6SwYGdyXTq057IKM+4WPfzurBz4+6KvjQAaxf8wrmXeE4tDLmuP4tnLffL80Lx3Mq7YiIt6RAHd6XQvEMzwFPcdnhzWzJ7BYOvGwDA4OsGlBlbSEgIteNiAWjdpSWtT2/JirlrA55bSb7kWrdhHWLqRgMQUSuCHoNOZ9emPaXate2WyN2v3czk0VM4dPDYH7YVc9bSc3BXYuvFEFsvhp6Du7JiztrAJHQcRXP98bPl/OGa/gB06tOezMNZxYZqwDPUlp2RTac+7QH4wzX9WTLT814ktIsvbNd3VC92bSo+JlyV4k+N49DODA7vOYIr38XmOTtpO6D4kETbgQnsXu65Gi47LZe0HRnUTYglJz2PgjxX4fp9a5KJa1N6uLEqNT21Pmk7j3BoTyaufDeb5uyiXf+mxdq0H9iMncs95/yy0nJJ23GEes1jiuWXlZbLnjUpNKiE/KSsk1hlNhRZUMZqVdXzjrNPIyBfVQ+JSBSecfwpqvp5We3rSJz2kUE+xXPU6InnM2LCEFwFLvKy83jt3nfYsMRzsuraRy6j/2X9cBW42LJ6O9NuepX8vALG3DGMyyaN9vZ0D7Psq9VMu+k1OvRsw4gJQ5h202sATPvuMVqckkBUbC3SUzKYduOrrJi7lvjWjXloxj3Ujotly+ptPHPNS4U9R3+q36Qef1/+DNF1olC3kn0khxtPvYesjGzadk3kj29MICwijH1bk3j2hukcOZRJ7bhY/vrhH2ncsiEHdibz+GXTyEg7Uiy38MhwXl35NwCy0rN48dY32LJ2O0Cl5eZrrk0SG/Gnt28nJDQECREWfbyk8BLZ6x69nM0rtrBk9gqmzP0rrbu0JHWfp1ge2JnM5DFTABg6biBX/vkiAGY89R/mvL0w4PmcyB2vjKfX0G7kZuXx7A1/Z/PKrQC8tmoqE3pMAqBDzzbc99ZEIqMiWP71Gl65418ATP74Xpp3bIa6laQdB3nx1jcq/InrtFWhFUuoiG3f7+W7Z1ejbuXU0W0448bOLJm+jsad42g7IAFVZdFza9ixeD8SKpwxvjMdz2/J3jXJzH9yBSKe4avuV3XgtAvb+CWmcDnuhYCObP1+H99OXYvbrXQZnUjfmzrxw/RfiO9cn3YDmqGqLHjuZ7Yv3o+ECGfe2IlO57dgz5pk5j6xCgkR1K30HNue0y9s7ZeYpnb7ZKWq9iprm89F/mSIyOnAO0Aonk8NH6nqY+W1P5kib4ypOH8W+erIn0W+Ojpekff56hoR+WMZqw8DK73TDpeiqj8D3X19DWOMMf7lZEy+F57LKBO8j5uBAcAbIvIn/4dmjDGmopxcJ98A6KGqRwBE5GHgE+BcYCXwN/+HZ4wxpiKc9ORbAnlFlvOBVqqaDSdxgbsxxpiAc9KTfx/4SURmepdHAjNEJAbY4PfIjDHGVJiT+eQfF5EvgbPxfMdrgqqu8G4eG4jgjDHGVIyT4RqAKCBdVV8AdoiIfy7yNMYYExBObhryMHA/8GfvqnDg/wIRlDHGGP9w0pO/EBgFZAKo6l6gdiCCMsYY4x9Oinyed+pgBfCecDXGGFONOSnyH4nIP4B6InIT8A1QPW5HY4wxpkxOrq55VkQGA+lAR2Cyqs4LWGTGGGMqzOk9XucBVtiNMaaGOGGRF5EMjnPDF1WtXhM+G2OMKXTCIq+qtQFE5DFgP/BvPF+GGotdXWOMMdWakxOvQ1V1uqpmqGq6qr4KXByowIwxxlSckyLvEpGx3htzh4jIWCC4Z+I3xpgazkmRvwq4DEjyPi71rjPGGFNNObmEcjswurztIvJnVX3aH0EZY4zxD6cTlB3PpX58LmOMMX7gzyIvfnwuY4wxfuDPIl/utfTGGGOqhvXkjTEmiPmzyH/kx+cyxhjjB+KZPdgPTySySlV7VOQ5Op0eqW/PbuaXeEzlC5fg/dpEfGhBVYcQUPGhsVUdQkClubOqOoSAapiwZ6Wq9iprmw3XGGNMELMTr8YYE8SsJ2+MMUHMn0X+Yz8+lzHGGD/wuciLyN9EpI6IhIvIfBFJFpGrj25X1acCE6IxxpiT5aQnP0RV04ERwG6gAzApIFEZY4zxCydFPtz7czgwQ1VTAxCPMcYYP3Jyj9fZIrIJyAZuE5FGQE5gwjLGGOMPPvfkVfUBoC/QS1XzgSyOM/WwMcaYqufkxGs0MBF41buqGVDmN6yMMcZUD07G5N8C8oB+3uXdwBN+j8gYY4zfOCnybVX1b0A+gKpmY1+AMsaYas1Jkc8TkSi80xeISFsgNyBRGWOM8QsnV9c8DHwNtBCR94CzgOsDEZQxxhj/8KnIi4gAm4CLgDPxDNPcparJAYzNGGNMBflU5FVVReQzVe0JfBHgmIwxxviJkzH5n0Skd8AiMcYY43dOxuQHAreIyA4gE8+Qjarq6QGJzBhjTIU5KfLDAhaFMcaYgHBS5O3OT8YYU8M4KfJf4Cn0AtQCWgO/AqcGIC5jjDF+4HORV9UuRZdFpAdwi98jMsYY4zdOevLFqOqq6ny1zZKFWTz/WCpuF4y6PJZrb6tXbPsLj6Wyckk2ADk5Slqyi2/WtQJg/54CnnogmaS9LkRg2luNadYivNRrVKVgzm/xwmyeffQQLheMuSKGcbfVKbb9ucfSWLHE82XrnGwlNcXFd+uas3xxDtMeP1TYbvuWfJ56uQEDh0ZXavwnsmBBDpMfTsftgiuvjOb222OLbX/4kXQWL/bkl52tpKS42bghHoAnn0xn/reebXfdFcvoUVGVG7wPvv42k3smH8TlgvFX1eH+O+KKbd+5O59xdyVxKN2Ny6U89VBDhg+KYdnqHCZMSgJAFSbf24ALh8eW9RJVav6CHB6cfBi3W7n6yhjuur12se279xQw8a400tMVl1v565/rMnhQLQBeeDmD9z7IJCREePrxupw3oFbA4/W5yIvIH4sshgA9gIMn2KcF8C4QD7iB11X1xZOI0xGXS3l2ciov/V8TGseHMW7UXs4ZHE3r9hGFbe6efOzA++jtdDb/kle4/OgfD3L97fXoc04UWZluQvx5J1w/COb8XC7lmb+mMf29xjSJD+WaUUn0/0MUbToc+yN07+T6hb9/8FYGv/6SD0DvfrWY8ZWnGB4+5GLMufs589zA/ydywuVSHvpLOjPej6Np01CGX5DMkCGRdCiS36OPHPuj9uabmaz35vfN/BzWrc9n7pyG5OUpF1+SynkDI6ldu/q8gS6XcseDB5nzYQLNm4bRZ9hORg6JoXPHyMI2T76QyiWjYrn1unps+DWXEVfvZevy1pzWMYJlX7ckLEzYl1RA90GefcPCqs8UWS6Xcv9Dh/hkRkOaNQ1l8PADnD+kFh2LvH/PvZjB6JFR3HBdLL9uzueKa1JYvTSeXzfn8+nMLH74tgn7k1xcfEUyS79vQmhoYPNzcnTULvKIxDNGf6L55AuAe1W1E55vyk4Ukc4nE6gTG9bk0rxVGAktwwmPEAaPjGHR3Kxy28+blcngUTEAbPstD5cL+pzj6SFFx4RQK6r6/CeC4M7vlzV5tEgMp3nLMMIjhCEjo1k4L7vc9nNmZTF0dOme+vwvs+k3oBZR1Sg3gNVr8klMDKVVqzAiIoTRo6OYM7f8KaA+m5nNmNGe9+q3zQWceWYEYWFCdHQInTuFsWBh9Zo+atnqHNomhtOmVTgREcLlo2sza05msTYikJHhBuBwhptm8Z6+ZnR0SGFBz8lVpPrU9kKrVufROjGMRO/7d+HoaL6aU/zeSQIcOeK5TiU93U18k1AAvpqTw4Wjo4mMFFq1DKN1YhirVueVfAm/c/I/YIOqPup9PKmq7wEjj7eDqu5T1VXe3zOAjUDCyYfrm4NJLho3O/YhpXHTMA4mucpsu293AXt3FdCrn6fHt3NrPrXrhHD/LQe4dvheXn4qFZerel1YFMz5HdjvoknT0MLlJk1DObi//Nz27Cqgd7/IUtvKK/5Vbf8+F82K5Nc0PoT9+8rOb/fuAnbtcnHWWZ5PaJ07h7NgQS7Z2UpqqpvFS/LYu7fsfavKnv0FtEg4dmwmNA1jz/6CYm0evq8B7/0ng5Y9tjHi6r28+ESjwm1LV+XQpf8Oug7cwfQpjatVLx5g3343zZode/+aNQ1lX4nj80/31uHj/2bRpec+rrg2haefqOvd11XGvu6Ax+ykyP/Zx3VlEpFEoDuwtMT6m0VkhYisOJTqnwNWy6pZ5Rwr82ZnMnB4dOFHJpcL1izP4c6H6vPmrKbs2VnAF58c8Utc/hLM+ZWZWjm5zZmdxR+K5HbUwSQXv/+aT99qNlQDzvKbOTOHC4bXKsyvf/9IzjsvklGjk7ltYho9e4QTFuCP+k6VdWyWzO+DTzO47vI67FzVms//rxnX3ZGE2+3ZsU+PWqz7rhVLv2rJlJdTyckJfBF0wpf8/vtZFldcGs26lU354N0G3HZnGm63+rRvIJywyIvIMBF5GUgQkZeKPN7GMxxzQiISC/wHuFtV04tuU9XXVbWXqvaqFxda9hM41Dg+lAN7j4V2YF8BjRqX/dzfzM5kiHco4+i+HTpHkNAynLAwof+QaH5dH/iPVE4Ec35N4kNJKtKzTdrnomGTsnObOyuLoaNK99bnfZHFwKFRhIdXrwII0LRpKHuL5Ldvv5sm8WXnN3NWNqPHFD+xetedtZk3txEfzGiAKrRu7Z//M/7SvGkYu/YcOzb37CugWZPip/7enJHOpSM9J1T79ooiJ9dNcokOXqcOEcREh7B+U/U5NgGaNQ0p9ulp7z5X4XDMUe99kMWYkZ73rXevSHJzlZRUN82ahpaxb+CHE315hb3ACjw37V5Z5DELGHqinUUkHE+Bf09V/3vyofquU9dIdm0vYO+ufPLzlHmzMzlncOlisGNLPumHXXTpEVls34zDbtJSPG/GisU5tG5ffa48geDOr3PXCHZty2fPzgLy85S5s7PoP7j0FSTbt+STnu7m9J4RpbbNKaf4VwfduoazbZuLnTsLyMtTZs7MZsjg0sNNv28p4PBhpVfPY++Ny6Wkpnl6ths25LNxUwH9+5fetyr17laL37flsW1nPnl5yoczMxg5NKZYmxYJYcz/wXOeZePmPHJylUYNQtm2M5+CAk93d8eufH7dkkdiNbrqC6B7twi2bitgh/f9+3RmFucPKf6JsXlCKIt+8Jwr2fxbPjm5SsMGIZw/pBafzswiN1fZsbOArdsK6NG99PHrbye8ukZV1wJrReR97w28feadovhfwEZVnXaSMToWFibc91gcd12bhNsFIy6LpU2HCF6flsYpXSI511sQ5846wuCRMUiRz0yhocIdD8Vx+9j9oNDxtAhGX1G7vJeqEsGcX1iY8KfH6nP7tQdxuZTRl8XStkM4rz53mM6nRxQW/DmzshgyMrpYbgB7dxWQtNdFzzOrV/E7KixMeOLxOlw1NhW3Gy6/PIqOHcOZOjWDrl3DGeItGDM/y2b0qFrF8svPh4suSgEgNlZ46aV61W7MOixMeOmpxgy7cg8uF4y7og6ndozk4b+l0LNrJKOGxvLsww25ZdIBXnw9DRF484UmiAg/LM3mb6+kER4OISK88nRjGjaoXp9UwsKEZ56ox6VXJeN2w1WXx3BKx3CenppOt67hDBsSxWOT63LPpEO89sYRRIRXnq+PiHBKx3BGj4zmrIFJhIYKU56sF/ArawBEyxzgLaOhSHvgaaAznm+8AqCqbY6zz9nA98A6PJdQAjyoql+W1b7T6ZH69uxmvkVuqp1wqV4nAf0pPtSnkckaKz60+l2P7k9p7vKvPgsGDRP2rFTVXmVtc/JlqLfw3B3qeTwzUo7jBPd4VdUfTtTGGGNM4DgZ9Y9S1fl4ev87VPUR4LzAhGWMMcYfnPTkc0QkBPhNRG4H9gCNAxOWMcYYf3DSk78biAbuBHoCVwPXBSIoY4wx/uFkFsrlACKiqjoucCEZY4zxF5978iLSV0Q24JmaABHpKiLTAxaZMcaYCnMyXPMCni8/pUDh9fPnBiIoY4wx/uHoO7WquqvEquC9MNoYY4KAk6trdolIP0BFJALPCdiNgQnLGGOMPzjpyU8AJuKZKng30M27bIwxppo6YU9eRKao6v3AQFUdWwkxGWOM8RNfevLDvTNJ+jx3vDHGmOrBlzH5r4FkIEZE0vHMRaNHf6pqnePtbIwxpuqcsCevqpNUtS7wharWUdXaRX9WQozGGGNOks8nXlX1RDftNsYYU834cuI1g2O3pjw6bbAN1xhjTA3gy52hqs9tg4wxxjji5MtQAIhIY4rfGWqnXyMyxhjjN04mKBslIr8B24DvgO3AVwGKyxhjjB84+cbr48CZwGZVbQ0MAn4MSFTGGGP8wkmRz1fVFCBEREJUdQGeqQ2MMcZUU07G5A+JSCywCHhPRA4AwX0Le2OMqeGc9ORHA9nAPXi+BbsFGBmIoIwxxviHk9v/ZRZZfCcAsRhjjPEzX74M9YOqnl3kS1EBm7smT8PYWRDnr6czxm+25Fd1BKYiMlyNqzqEANtT7hZfvgx1tvenfSnKGGNqGEdfhhKR+kCLovup6ip/B2WMMcY/fC7yIvI4cD2wFXB7Vytwnv/DMsYY4w9OevKXAW1VNS9QwRhjjPEvJ5dQrgfqBSoQY4wx/uekJ/80sFpE1gO5R1eq6ii/R2WMMcYvnBT5d4ApwDqOjckbY4ypxpwU+WRVfSlgkRhjjPE7J0V+pYg8Dcyi+HCNXUJpjDHVlJMi393788wi6+wSSmOMqcaczF0zMJCBGGOM8T8nd4aqKyLTRGSF9/GciNQNZHDGGGMqxsl18m8CGXi+FHUZkA68FYigjDHG+IeTMfm2qnpxkeVHRWSNvwMyxhjjP0568tkicvbRBRE5C89NRIwxxlRTTnryE4B3vePwAqTimbDMGGNMNeXk6pq1QFcRqeNdTg9YVMYYY/zCyVTDkcDFQCIQJiIAqOpjAYnMGGNMhTkZrpkJHAZWUuQbr8YYY6ovJ0W+uaqeH7BIjDHG+J2Tq2sWi0iXgEVijDHG75z05M8GrheRbXiGawRQVT09IJEZY4ypMCdFfljAogiANd8d5q0nduN2waDLGjBmQnyx7W8/sZtflmYAkJft5nBKAW+v7sr2DVm8MXkX2UdchITCRbfF0++CuKpI4biCOb9gzg0sv5qe37pFacx4civqhnMubcLwm5sX2/7BU1vZtNRz8WFejov0lJg9W8gAAAsISURBVHxeWeGZ1/H58b+wZW0G7XvW4a5/dK6UeJ0U+TuAN1V1g687iMibwAjggKqe5jS4k+V2Kf96ZBd/eac9DeLD+fNFv9JrUF2at48qbHP9X469MV+9e4BtGzzf64qICuH2Z1vRNLEWqUl5PDBmE13PqUNMHSf/VIEVzPkFc25g+UHNz++9x7Zy71unUr9JBI9fspZu58XRrF10YZsrHmxT+Pv8f+9lx4bMwuWhNyaQl+3muw/3V1rMTsbkNwFviMhSEZng4+RkbwOVfrL297WZxLeKpEnLSMIiQuh3QX2Wf3O43PY/zk7j7BH1AWjWuhZNE2sBENckgroNwklPLaiUuH0VzPkFc25g+ZVU0/Lb+nMGjVvVolGLWoRFhHDGBY1YPT+13PZLv0imz4hGhcud+9ajVkxoZYRayOcir6r/VNWzgGvxXCv/s4i8LyLlTkGsqovwfDO2UqUm5dOgaUThcoP4cFKT8stse3BPLgd253Ja39qltv2+NpOCfDdNWkYGLNaTEcz5BXNuYPkVVRPzO5SUR1z8sfzqN4ngUFLZV5Qn78kheXcOnc6s2sl6nfTkEZFQ4BTvIxlYC/xRRD442QBE5Oaj0xf766+2almvU3bbHz9P48zz6xMSWrxB2oF8Xr5vO7c+k0hISDk7V5Fgzi+YcwPLr6hgya+8BJd9kUzPoQ1L5VfZnMwnPw34FRgOPKWqPVV1iqqO5NhdoxxT1ddVtZeq9qoT55+xtwbx4aTsyytcTtmfT/3G4WW2Xfx5GmeNrF9sXVaGi2du/J0r7mlGh+4xfonJn4I5v2DODSy/ompifvXjI0jdfyy/tKQ86jWOKLPtsi+T6XNBw8oKrVxOevLrgdNV9RZVXVZi2xl+jKnC2p4ew74duRzYlUtBnpvFX6TRa1Dpj0x7t+aQme4qdjAV5Ll59ratnHthA/oOr19qn+ogmPML5tzA8juqpubXukttkrZnc3BXDgV5bpZ9cZBu55W+Amj/1iyy0gto2730UFRlO2HXWUR6eH9dA5wiJT6aqOoqVS3/zEoVCA0Tbni4BU+O+x23Sxl4aQNadIjiwxf20va0aHr9oR4AP8xOpd8F9Sma0+Iv09i4PIOMQwUs/G8KABOntCKxc3SZr1UVgjm/YM4NLL9gyG/s5DY8f+MvuF1w9sWNSWgfzWcv7iDxtFi6DWoAeE64njG8ISXr5TNXrWPf1ixys9zcd+5yrn+yHaedE9g/aKJlDjIVaSCy4DibVVXLvZG3iMwABgANgSTgYVX9V3nt23aJ0Wc+O+W48RhjjFMZrqgTN6rBxnf8caWq9ipr2wl78hW5gbeqXnmy+xpjjKk4J1MNhwO3Aud6Vy0E/qGqZV8fZYwxpso5uZzlVSAcmO5dvsa77kZ/B2WMMcY/nBT53qratcjytyKy1t8BGWOM8R8nl1C6RKTt0QURaQO4/B+SMcYYf3HSk58ELBCRrd7lRGCc3yMyxhjjN0568j8C/wDc3sc/gCWBCMoYY4x/OOnJvwukA497l68E/g1c6u+gjDHG+IeTIt+xxInXBXbi1RhjqjcnwzWrReTMowsi0gfPEI4xxphqyklPvg9wrYjs9C63BDaKyDrsXq/GGFMtOSnylX6HJ2OMMRXjc5FX1R2BDMQYY4z/ObozlDHGmJrFirwxxgQxK/LGGBPErMgbY0wQsyJvjDFBzIq8McYEMSvyxhgTxKzIG2NMELMib4wxQcyKvDHGBDFR1aqOoZCIHAQqc/qEhkByJb5eZbP8ajbLr+aq7NxaqWqjsjZUqyJf2URkhar2quo4AsXyq9ksv5qrOuVmwzXGGBPErMgbY0wQ+18v8q9XdQABZvnVbJZfzVVtcvufHpM3xphg97/ekzfGmKBmRd4YY4JYUBV5ETlfRH4Vkd9F5IEytkeKyIfe7UtFJLHItj971/8qIkOLrH9TRA6IyPrKycI3J5uriDQQkQUickREXqnsuE+GD7meKyKrRKRARC6pihj9qboecyerrHxEJE5E5onIb96f9asyRqec5CQeL3mP359FpEdlxho0RV5EQoG/A8OAzsCVItK5RLPxQJqqtgOeB6Z49+0MXAGciueG5dO9zwfwNtXsJuYVyRXIAf4K3FdJ4VaIj7nuBK4H3q/c6ALmbarZMVdBb1M6nweA+araHpjvXa5J3sb3nIYB7b2Pm4FXKylGIIiKPHAG8LuqblXVPOADYHSJNqOBd7y/fwIMEhHxrv9AVXNVdRvwu/f5UNVFQGplJODASeeqqpmq+gOeYl8TnDBXVd2uqj8D7qoI0N+q6TF30srJp+jx+Q4wplKDqiCHOY0G3lWPn4B6ItK0ciINriKfAOwqsrzbu67MNqpaABwGGvi4b3VSkVxrmpr23hjfNFHVfQDen42rOB5/KC+nKj2Gg6nISxnrSl4fWl4bX/atTiqSa00TLHmY/11VegwHU5HfDbQostwc2FteGxEJA+ri+cjly77VSUVyrWlq2ntjfJN0dMjC+/NAFcfjD+XlVKXHcDAV+eVAexFpLSIReE6kzirRZhZwnff3S4Bv1fNtsFnAFd4rUlrjOUGyrJLiPhkVybWm8SVXU/MUPT6vA2ZWYSz+Ul5Os4BrvVfZnAkcPjqsUylUNWgewHBgM7AFeMi77jFglPf3WsDHeE6sLgPaFNn3Ie9+vwLDiqyfAewD8vH8RR5f1Xn6IdfteHr1R7w5da7qfCqYa29vHplACvBLVcdcwXyr5THnz3zwnB+aD/zm/RlX1XEGKic8wzV/9x6/64BelRmrTWtgjDFBLJiGa4wxxpRgRd4YY4KYFXljjAliVuSNMSaIWZE3xpggZkXeGGOCmBV5U6OJyJciUq+M9Y+ISJXNtCkiR/zRxpiKCqvqAIw5Wd4ZREeoalDMPmlMIFhP3tQoIpIoIhtFZDqwCnCJSEPvtoe8Nxf5BuhYZJ/e3ps1LBGRqUdv9CAiod7l5d7ttziMJVZE5ntvWLJOREpO94yIDBCRRSLyqYhsEJHXRCSkyPYnRWStiPwkIk2860Z6b/SyWkS+ObremJNhRd7URB3xzM/dHdgBICI98cxr0x24CM9UB0e9BUxQ1b6Aq8j68XjmEentbX+Td+4iX+UAF6pqD2Ag8Jz300VJZwD3Al2Att74AGKAn1S1K7AIuMm7/gfgTG9+HwB/chCTMcXYcI2piXao5+YLRZ0DfKqqWQAiMsv7sx5QW1UXe9u9D4zw/j4EOL3ILQPr4pmcbpuPcQjwlIici+eGJQlAE2B/iXbLVHWrN54ZwNl4buSSB3zubbMSGOz9vTnwoXcmwwgH8RhTihV5UxNllrO+rImYyupZF912h6rOOck4xgKNgJ6qmi8i2/FMDHeiuI4u5+uxyaNcHPv/+DIwTVVnicgA4JGTjM8YG64xQWMRcKGIRIlIbWAkgKqmARneKV7BM6Rz1BzgVhEJBxCRDiIS4+A16wIHvAV+INCqnHZneKdKDgEuxzMcc6Ln3eP9/brjNTTmRKwnb4KCqq4SkQ+BNXjG6b8vsnk88IaIZAIL8dwKEeCfQCKwyjuWfhBn9xp9D5gtIiu8r7upnHZLgGfwjMkvAj49wfM+AnwsInuAnwAn5wmMKcamGjZBT0RiVfWI9/cHgKaqelclvfYA4D5VHXGitsYEgvXkzf+CC0Tkz3iO9x3A9VUbjjGVx3ryxhQhIl2Af5dY3QLYVWJdrqr2qZyojDl5VuSNMSaI2dU1xhgTxKzIG2NMELMib4wxQcyKvDHGBLH/Bx3jhG4XIwzVAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mglearn.tools.heatmap(grid.cv_results_['mean_test_score'].reshape(3, -1),\n",
    "                      xlabel=\"ridge__alpha\", ylabel=\"polynomialfeatures__degree\",\n",
    "                      xticklabels=param_grid['ridge__alpha'],\n",
    "                      yticklabels=param_grid['polynomialfeatures__degree'], vmin=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameters: {'polynomialfeatures__degree': 2, 'ridge__alpha': 10}\n"
     ]
    }
   ],
   "source": [
    "print(\"Best parameters: {}\".format(grid.best_params_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test-set score: 0.77\n"
     ]
    }
   ],
   "source": [
    "print(\"Test-set score: {:.2f}\".format(grid.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Score without poly features: 0.63\n"
     ]
    }
   ],
   "source": [
    "param_grid = {'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]}\n",
    "pipe = make_pipeline(StandardScaler(), Ridge())\n",
    "grid = GridSearchCV(pipe, param_grid, cv=5)\n",
    "grid.fit(X_train, y_train)\n",
    "print(\"Score without poly features: {:.2f}\".format(grid.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "pipe = Pipeline([('preprocessing', StandardScaler()), ('classifier', SVC())])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "param_grid = [\n",
    "    {'classifier': [SVC()], 'preprocessing': [StandardScaler(), None],\n",
    "     'classifier__gamma': [0.001, 0.01, 0.1, 1, 10, 100],\n",
    "     'classifier__C': [0.001, 0.01, 0.1, 1, 10, 100]},\n",
    "    {'classifier': [RandomForestClassifier(n_estimators=100)],\n",
    "     'preprocessing': [None], 'classifier__max_features': [1, 2, 3]}]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best params:\n",
      "{'classifier': SVC(C=10, gamma=0.01), 'classifier__C': 10, 'classifier__gamma': 0.01, 'preprocessing': StandardScaler()}\n",
      "\n",
      "Best cross-validation score: 0.99\n",
      "Test-set score: 0.98\n"
     ]
    }
   ],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    cancer.data, cancer.target, random_state=0)\n",
    "\n",
    "grid = GridSearchCV(pipe, param_grid, cv=5)\n",
    "grid.fit(X_train, y_train)\n",
    "\n",
    "print(\"Best params:\\n{}\\n\".format(grid.best_params_))\n",
    "print(\"Best cross-validation score: {:.2f}\".format(grid.best_score_))\n",
    "print(\"Test-set score: {:.2f}\".format(grid.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Avoiding Redundant Computation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "pipe = Pipeline([('preprocessing', StandardScaler()), ('classifier', SVC())],\n",
    "                memory=\"cache_folder\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Summary and Outlook"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
